<mxfile host="app.diagrams.net" modified="2026-06-03T00:00:00.000Z" agent="Codex" version="24.7.17" type="device">
  <diagram id="erd-project-detail" name="ERD Project Detail">
    <mxGraphModel dx="2200" dy="1500" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2200" pageHeight="1500" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="title" value="ERD Aplikasi Permintaan dan Prediksi Stok Bahan Kue" style="text;html=1;strokeColor=none;fillColor=none;fontFamily=Arial;fontSize=26;fontStyle=1;fontColor=#222222;" vertex="1" parent="1">
          <mxGeometry x="540" y="30" width="1120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="note" value="Gaya Chen: entitas = kotak, atribut = oval, relasi = belah ketupat. Atribut bergaris bawah adalah primary key. Beberapa label memakai alias tabel sesuai kode runtime: transactions / Stock In, predictions / prediksi, products.name / product_name." style="text;html=1;strokeColor=none;fillColor=none;fontFamily=Arial;fontSize=13;fontColor=#555555;whiteSpace=wrap;" vertex="1" parent="1">
          <mxGeometry x="485" y="75" width="1170" height="45" as="geometry" />
        </mxCell>

        <!-- Entities -->
        <mxCell id="e_login" value="Login" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=14;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="170" y="250" width="130" height="70" as="geometry" />
        </mxCell>
        <mxCell id="e_otp" value="Password_Reset_OTP" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="175" y="520" width="160" height="70" as="geometry" />
        </mxCell>
        <mxCell id="e_products" value="Products / Bahan" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=14;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="700" y="250" width="155" height="75" as="geometry" />
        </mxCell>
        <mxCell id="e_stockin" value="Transactions / Stock In" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="690" y="580" width="180" height="75" as="geometry" />
        </mxCell>
        <mxCell id="e_predictions" value="Predictions / Prediksi" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1260" y="250" width="175" height="75" as="geometry" />
        </mxCell>
        <mxCell id="e_recipes" value="Recipes" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=14;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1160" y="590" width="140" height="70" as="geometry" />
        </mxCell>
        <mxCell id="e_ingredients" value="Recipe_Ingredients" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1595" y="590" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="e_usage" value="Stock_Usage_History" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1125" y="1015" width="190" height="75" as="geometry" />
        </mxCell>
        <mxCell id="e_stokkeluar" value="Stok_Keluar" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="710" y="1015" width="145" height="75" as="geometry" />
        </mxCell>
        <mxCell id="e_stokmasuk" value="Stok_Masuk" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="420" y="780" width="145" height="70" as="geometry" />
        </mxCell>
        <mxCell id="e_bahan_report" value="Bahan (Laporan)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="420" y="1015" width="145" height="75" as="geometry" />
        </mxCell>

        <!-- Relationships -->
        <mxCell id="r_login_otp" value="memiliki" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="210" y="400" width="90" height="65" as="geometry" />
        </mxCell>
        <mxCell id="r_login_product" value="mengelola" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="440" y="255" width="105" height="70" as="geometry" />
        </mxCell>
        <mxCell id="r_stockin_product" value="menambah stok" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="725" y="420" width="115" height="75" as="geometry" />
        </mxCell>
        <mxCell id="r_product_prediction" value="diprediksi" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="1010" y="255" width="105" height="70" as="geometry" />
        </mxCell>
        <mxCell id="r_recipe_detail" value="memiliki" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="1395" y="590" width="95" height="70" as="geometry" />
        </mxCell>
        <mxCell id="r_ing_product" value="mengacu bahan" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="1515" y="345" width="115" height="75" as="geometry" />
        </mxCell>
        <mxCell id="r_recipe_usage" value="produksi memakai" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="1180" y="805" width="115" height="75" as="geometry" />
        </mxCell>
        <mxCell id="r_usage_product" value="mengurangi stok" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="915" y="760" width="125" height="75" as="geometry" />
        </mxCell>
        <mxCell id="r_bahan_product" value="sinkron" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="600" y="940" width="95" height="70" as="geometry" />
        </mxCell>
        <mxCell id="r_stokmasuk_bahan" value="dicatat" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#666666;strokeWidth=2;fontFamily=Arial;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="462" y="910" width="90" height="65" as="geometry" />
        </mxCell>

        <!-- Login attributes -->
        <mxCell id="a_login_id" value="&lt;u&gt;id_login&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="45" y="130" width="95" height="45" as="geometry" /></mxCell>
        <mxCell id="a_login_nama" value="nama" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="145" y="145" width="85" height="45" as="geometry" /></mxCell>
        <mxCell id="a_login_email" value="email" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="245" y="145" width="85" height="45" as="geometry" /></mxCell>
        <mxCell id="a_login_username" value="username" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="325" y="170" width="105" height="45" as="geometry" /></mxCell>
        <mxCell id="a_login_password" value="password" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="55" y="335" width="100" height="45" as="geometry" /></mxCell>
        <mxCell id="a_login_created" value="created_at" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="305" y="335" width="105" height="45" as="geometry" /></mxCell>

        <!-- OTP attributes -->
        <mxCell id="a_otp_id" value="&lt;u&gt;id_otp&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="55" y="665" width="90" height="45" as="geometry" /></mxCell>
        <mxCell id="a_otp_login" value="login_id (FK)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="155" y="690" width="115" height="45" as="geometry" /></mxCell>
        <mxCell id="a_otp_code" value="otp_code" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="280" y="690" width="100" height="45" as="geometry" /></mxCell>
        <mxCell id="a_otp_exp" value="expires_at" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="360" y="630" width="105" height="45" as="geometry" /></mxCell>
        <mxCell id="a_otp_used" value="is_used" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="30" y="580" width="90" height="45" as="geometry" /></mxCell>

        <!-- Product attributes -->
        <mxCell id="a_prod_id" value="&lt;u&gt;id_product&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="610" y="110" width="120" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_name" value="name / product_name" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="740" y="105" width="150" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_cat" value="category" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="900" y="130" width="100" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_type" value="product_type" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="560" y="180" width="115" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_unit" value="unit" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="890" y="210" width="80" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_price" value="price" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="565" y="345" width="85" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_stock" value="current_stock" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="690" y="360" width="125" height="45" as="geometry" /></mxCell>
        <mxCell id="a_prod_min" value="min_stock" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="825" y="350" width="105" height="45" as="geometry" /></mxCell>

        <!-- Stock in attributes -->
        <mxCell id="a_stockin_id" value="&lt;u&gt;id_transaction&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="570" y="510" width="135" height="45" as="geometry" /></mxCell>
        <mxCell id="a_stockin_pname" value="product_name" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="870" y="515" width="120" height="45" as="geometry" /></mxCell>
        <mxCell id="a_stockin_qty" value="quantity / jumlah" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="560" y="680" width="135" height="45" as="geometry" /></mxCell>
        <mxCell id="a_stockin_price" value="unit_price" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="710" y="715" width="105" height="45" as="geometry" /></mxCell>
        <mxCell id="a_stockin_total" value="total_price" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="820" y="690" width="110" height="45" as="geometry" /></mxCell>
        <mxCell id="a_stockin_date" value="transaction_date" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="910" y="620" width="140" height="45" as="geometry" /></mxCell>

        <!-- Prediction attributes -->
        <mxCell id="a_pred_id" value="&lt;u&gt;id_prediction&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1180" y="110" width="130" height="45" as="geometry" /></mxCell>
        <mxCell id="a_pred_product" value="product_name / nama_produk" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1320" y="110" width="180" height="45" as="geometry" /></mxCell>
        <mxCell id="a_pred_date" value="prediction_date / tanggal_prediksi" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1515" y="145" width="205" height="45" as="geometry" /></mxCell>
        <mxCell id="a_pred_qty" value="predicted_quantity / hasil_prediksi" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1495" y="300" width="210" height="45" as="geometry" /></mxCell>
        <mxCell id="a_pred_needs" value="estimated_needs / estimasi_kebutuhan_bahan" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1195" y="380" width="255" height="45" as="geometry" /></mxCell>
        <mxCell id="a_pred_metric" value="accuracy_r2, error_mae" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1460" y="390" width="155" height="45" as="geometry" /></mxCell>

        <!-- Recipe attributes -->
        <mxCell id="a_recipe_id" value="&lt;u&gt;id_recipe&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1090" y="500" width="110" height="45" as="geometry" /></mxCell>
        <mxCell id="a_recipe_name" value="recipe_name" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1240" y="500" width="120" height="45" as="geometry" /></mxCell>
        <mxCell id="a_recipe_desc" value="description" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1060" y="690" width="115" height="45" as="geometry" /></mxCell>
        <mxCell id="a_recipe_created" value="created_at" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1250" y="700" width="110" height="45" as="geometry" /></mxCell>

        <!-- Ingredient attributes -->
        <mxCell id="a_ing_id" value="&lt;u&gt;id_recipe_ingredient&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1545" y="500" width="170" height="45" as="geometry" /></mxCell>
        <mxCell id="a_ing_recipe" value="recipe_id (FK)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1740" y="505" width="120" height="45" as="geometry" /></mxCell>
        <mxCell id="a_ing_product" value="product_name" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1785" y="610" width="120" height="45" as="geometry" /></mxCell>
        <mxCell id="a_ing_qty" value="quantity_needed" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1545" y="710" width="140" height="45" as="geometry" /></mxCell>
        <mxCell id="a_ing_unit" value="unit" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1710" y="710" width="80" height="45" as="geometry" /></mxCell>

        <!-- Usage attributes -->
        <mxCell id="a_usage_id" value="&lt;u&gt;id_usage&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1005" y="930" width="105" height="45" as="geometry" /></mxCell>
        <mxCell id="a_usage_recipe" value="recipe_name" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1115" y="930" width="115" height="45" as="geometry" /></mxCell>
        <mxCell id="a_usage_prod" value="product_id (FK)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1240" y="930" width="125" height="45" as="geometry" /></mxCell>
        <mxCell id="a_usage_qty" value="quantity_used" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1025" y="1125" width="125" height="45" as="geometry" /></mxCell>
        <mxCell id="a_usage_prodqty" value="production_quantity" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1165" y="1135" width="150" height="45" as="geometry" /></mxCell>
        <mxCell id="a_usage_unit" value="unit" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="1330" y="1125" width="80" height="45" as="geometry" /></mxCell>

        <!-- Stok keluar attributes -->
        <mxCell id="a_skel_id" value="&lt;u&gt;id_stok_keluar&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="600" y="1125" width="135" height="45" as="geometry" /></mxCell>
        <mxCell id="a_skel_bahan" value="bahan_id" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="750" y="1135" width="95" height="45" as="geometry" /></mxCell>
        <mxCell id="a_skel_qty" value="jumlah_keluar" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="860" y="1125" width="125" height="45" as="geometry" /></mxCell>
        <mxCell id="a_skel_date" value="tanggal_keluar" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="680" y="930" width="130" height="45" as="geometry" /></mxCell>

        <!-- Bahan report attributes -->
        <mxCell id="a_bahan_id" value="&lt;u&gt;id_bahan&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="255" y="930" width="100" height="45" as="geometry" /></mxCell>
        <mxCell id="a_bahan_prod" value="product_id (FK)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="365" y="930" width="125" height="45" as="geometry" /></mxCell>
        <mxCell id="a_bahan_nama" value="nama_bahan" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="250" y="1115" width="120" height="45" as="geometry" /></mxCell>
        <mxCell id="a_bahan_stok" value="stok" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="380" y="1135" width="80" height="45" as="geometry" /></mxCell>
        <mxCell id="a_bahan_min" value="stok_minimum" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="470" y="1130" width="125" height="45" as="geometry" /></mxCell>

        <!-- Stok masuk report attributes -->
        <mxCell id="a_smasuk_id" value="&lt;u&gt;id_stok_masuk&lt;/u&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="250" y="780" width="140" height="45" as="geometry" /></mxCell>
        <mxCell id="a_smasuk_bahan" value="bahan_id / product_id" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="300" y="705" width="155" height="45" as="geometry" /></mxCell>
        <mxCell id="a_smasuk_jumlah" value="jumlah" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="575" y="775" width="90" height="45" as="geometry" /></mxCell>
        <mxCell id="a_smasuk_tanggal" value="tanggal" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#999999;fontFamily=Arial;fontSize=12;" vertex="1" parent="1"><mxGeometry x="560" y="850" width="90" height="45" as="geometry" /></mxCell>

        <!-- Connect attributes to entities -->
        <mxCell id="edge_a_login_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_login_id" target="e_login"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_login_nama" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_login_nama" target="e_login"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_login_email" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_login_email" target="e_login"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_login_username" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_login_username" target="e_login"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_login_password" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_login_password" target="e_login"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_login_created" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_login_created" target="e_login"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_otp_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_otp_id" target="e_otp"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_otp_login" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_otp_login" target="e_otp"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_otp_code" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_otp_code" target="e_otp"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_otp_exp" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_otp_exp" target="e_otp"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_otp_used" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_otp_used" target="e_otp"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_prod_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_id" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_name" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_name" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_cat" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_cat" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_type" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_type" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_unit" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_unit" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_price" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_price" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_stock" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_stock" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_prod_min" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_prod_min" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_stockin_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_stockin_id" target="e_stockin"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_stockin_pname" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_stockin_pname" target="e_stockin"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_stockin_qty" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_stockin_qty" target="e_stockin"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_stockin_price" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_stockin_price" target="e_stockin"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_stockin_total" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_stockin_total" target="e_stockin"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_stockin_date" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_stockin_date" target="e_stockin"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_pred_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_pred_id" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_pred_product" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_pred_product" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_pred_date" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_pred_date" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_pred_qty" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_pred_qty" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_pred_needs" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_pred_needs" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_pred_metric" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_pred_metric" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_recipe_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_recipe_id" target="e_recipes"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_recipe_name" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_recipe_name" target="e_recipes"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_recipe_desc" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_recipe_desc" target="e_recipes"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_recipe_created" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_recipe_created" target="e_recipes"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_ing_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_ing_id" target="e_ingredients"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_ing_recipe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_ing_recipe" target="e_ingredients"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_ing_product" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_ing_product" target="e_ingredients"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_ing_qty" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_ing_qty" target="e_ingredients"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_ing_unit" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_ing_unit" target="e_ingredients"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_usage_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_usage_id" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_usage_recipe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_usage_recipe" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_usage_prod" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_usage_prod" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_usage_qty" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_usage_qty" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_usage_prodqty" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_usage_prodqty" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_usage_unit" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_usage_unit" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_skel_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_skel_id" target="e_stokkeluar"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_skel_bahan" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_skel_bahan" target="e_stokkeluar"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_skel_qty" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_skel_qty" target="e_stokkeluar"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_skel_date" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_skel_date" target="e_stokkeluar"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_bahan_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_bahan_id" target="e_bahan_report"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_bahan_prod" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_bahan_prod" target="e_bahan_report"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_bahan_nama" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_bahan_nama" target="e_bahan_report"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_bahan_stok" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_bahan_stok" target="e_bahan_report"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_bahan_min" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_bahan_min" target="e_bahan_report"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_a_smasuk_id" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_smasuk_id" target="e_stokmasuk"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_smasuk_bahan" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_smasuk_bahan" target="e_stokmasuk"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_smasuk_jumlah" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_smasuk_jumlah" target="e_stokmasuk"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_a_smasuk_tanggal" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#777777;" edge="1" parent="1" source="a_smasuk_tanggal" target="e_stokmasuk"><mxGeometry relative="1" as="geometry" /></mxCell>

        <!-- Relationship edges with cardinalities -->
        <mxCell id="edge_login_r_otp" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_login" target="r_login_otp"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_otp_r_login" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_login_otp" target="e_otp"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_login_r_product" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_login" target="r_login_product"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_product_r_login" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_login_product" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_stockin_r_prod" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_stockin" target="r_stockin_product"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_prod_r_stockin" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_stockin_product" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_prod_r_pred" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_products" target="r_product_prediction"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_pred_r_prod" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_product_prediction" target="e_predictions"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_recipe_r_detail" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_recipes" target="r_recipe_detail"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_detail_r_recipe" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_recipe_detail" target="e_ingredients"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_ing_r_prod" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_ingredients" target="r_ing_product"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_prod_r_ing" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_ing_product" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_recipe_r_usage" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_recipes" target="r_recipe_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_usage_r_recipe" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_recipe_usage" target="e_usage"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_usage_r_prod" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_usage" target="r_usage_product"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_prod_r_usage" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_usage_product" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>

        <mxCell id="edge_bahan_r_prod" value="0..1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_bahan_report" target="r_bahan_product"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_prod_r_bahan" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_bahan_product" target="e_products"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_stokmasuk_r_bahan" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_stokmasuk" target="r_stokmasuk_bahan"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_bahan_r_stokmasuk" value="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="r_stokmasuk_bahan" target="e_bahan_report"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="edge_stokkeluar_r_bahan" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;strokeColor=#555555;fontSize=12;" edge="1" parent="1" source="e_stokkeluar" target="r_bahan_product"><mxGeometry relative="1" as="geometry" /></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
