<mxfile host="app.diagrams.net" modified="2026-04-22T10:10:00.000Z" agent="Codex" version="25.0.2">
  <diagram id="hris-database-core" name="HRIS Database Core">
    <mxGraphModel dx="1788" dy="980" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2400" pageHeight="1800" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <mxCell id="t1" value="HRIS Database Core" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#0f172a;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="480" height="30" as="geometry" />
        </mxCell>
        <mxCell id="t2" value="Core entity map: employee, assignment, attendance, approval, BPJS, payroll." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#475569;" vertex="1" parent="1">
          <mxGeometry x="40" y="52" width="900" height="20" as="geometry" />
        </mxCell>

        <mxCell id="laneA" value="A. Foundation Masters" style="swimlane;html=1;rounded=1;fillColor=#f8fafc;strokeColor=#cbd5e1;fontSize=16;fontStyle=1;startSize=32;" vertex="1" parent="1">
          <mxGeometry x="40" y="100" width="430" height="1450" as="geometry" />
        </mxCell>
        <mxCell id="laneB" value="B. Employee &amp; Placement" style="swimlane;html=1;rounded=1;fillColor=#eff6ff;strokeColor=#bfdbfe;fontSize=16;fontStyle=1;startSize=32;" vertex="1" parent="1">
          <mxGeometry x="500" y="100" width="520" height="1450" as="geometry" />
        </mxCell>
        <mxCell id="laneC" value="C. Operational Transactions" style="swimlane;html=1;rounded=1;fillColor=#f0fdf4;strokeColor=#bbf7d0;fontSize=16;fontStyle=1;startSize=32;" vertex="1" parent="1">
          <mxGeometry x="1050" y="100" width="520" height="1450" as="geometry" />
        </mxCell>
        <mxCell id="laneD" value="D. Approval Engine" style="swimlane;html=1;rounded=1;fillColor=#fffbeb;strokeColor=#fde68a;fontSize=16;fontStyle=1;startSize=32;" vertex="1" parent="1">
          <mxGeometry x="1600" y="100" width="360" height="650" as="geometry" />
        </mxCell>
        <mxCell id="laneE" value="E. Payroll &amp; Compliance" style="swimlane;html=1;rounded=1;fillColor=#faf5ff;strokeColor=#d8b4fe;fontSize=16;fontStyle=1;startSize=32;" vertex="1" parent="1">
          <mxGeometry x="1600" y="780" width="660" height="770" as="geometry" />
        </mxCell>

        <mxCell id="a1" value="users&#xa;RBAC, maker, approver, marked_by" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="160" width="180" height="60" as="geometry" />
        </mxCell>
        <mxCell id="a2" value="master_jabatans" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="250" width="180" height="54" as="geometry" />
        </mxCell>
        <mxCell id="a3" value="master_clients" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="330" width="180" height="54" as="geometry" />
        </mxCell>
        <mxCell id="a4" value="master_areas&#xa;hierarchy + client linkage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="410" width="200" height="60" as="geometry" />
        </mxCell>
        <mxCell id="a5" value="master_bpjs&#xa;+ rate histories&#xa;+ ceiling histories" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="500" width="210" height="74" as="geometry" />
        </mxCell>
        <mxCell id="a6" value="master_approval_flows" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="610" width="200" height="54" as="geometry" />
        </mxCell>
        <mxCell id="a7" value="master_approval_flow_steps" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="690" width="210" height="54" as="geometry" />
        </mxCell>
        <mxCell id="a8" value="master_profil_bulans" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#64748b;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="90" y="780" width="200" height="54" as="geometry" />
        </mxCell>

        <mxCell id="b1" value="master_karyawans&#xa;NIK, finger, biodata, KTP, domisili, kontak, agama" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#2563eb;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="560" y="160" width="260" height="80" as="geometry" />
        </mxCell>
        <mxCell id="b2" value="karyawan_area_histories&#xa;mutasi area per periode" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="280" width="220" height="64" as="geometry" />
        </mxCell>
        <mxCell id="b3" value="master_karyawan_offering_letters&#xa;effective salary snapshot" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="370" width="240" height="64" as="geometry" />
        </mxCell>
        <mxCell id="b4" value="master_karyawan_contract_documents" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="460" width="240" height="54" as="geometry" />
        </mxCell>
        <mxCell id="b5" value="master_karyawan_supporting_documents" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="540" width="250" height="54" as="geometry" />
        </mxCell>
        <mxCell id="b6" value="master_karyawan_signature_requests&#xa;token, payload, expiry, opened, signed" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="620" width="270" height="74" as="geometry" />
        </mxCell>
        <mxCell id="b7" value="master_karyawan_bpjs_profiles" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="720" width="240" height="54" as="geometry" />
        </mxCell>
        <mxCell id="b8" value="master_karyawan_bpjs_profile_components" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="800" width="260" height="54" as="geometry" />
        </mxCell>
        <mxCell id="b9" value="master_profil_bulan_karyawans&#xa;assignment bulanan&#xa;profil gaji, cycle, overtime mode" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#bfdbfe;strokeColor=#1d4ed8;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="560" y="910" width="280" height="84" as="geometry" />
        </mxCell>
        <mxCell id="b10" value="payroll_karyawan_component_overrides" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#3b82f6;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="560" y="1020" width="250" height="54" as="geometry" />
        </mxCell>

        <mxCell id="c1" value="attendance_logs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#16a34a;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1110" y="160" width="190" height="54" as="geometry" />
        </mxCell>
        <mxCell id="c2" value="attendance_daily_reviews" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#15803d;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1110" y="240" width="210" height="54" as="geometry" />
        </mxCell>
        <mxCell id="c3" value="attendance_daily_review_histories" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#16a34a;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1110" y="320" width="230" height="54" as="geometry" />
        </mxCell>
        <mxCell id="c4" value="request modules&#xa;leave / reimbursement / forgetting clock" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#16a34a;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1110" y="420" width="250" height="70" as="geometry" />
        </mxCell>
        <mxCell id="c5" value="surat_perintah_lemburs&#xa;SPL draft - approved - separate payout flag" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#15803d;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1110" y="520" width="270" height="74" as="geometry" />
        </mxCell>

        <mxCell id="d1" value="approval_requests&#xa;module_key + reference_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#d97706;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1660" y="220" width="220" height="64" as="geometry" />
        </mxCell>
        <mxCell id="d2" value="approval_request_steps&#xa;step status, acted_at, notes" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d97706;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1660" y="320" width="220" height="64" as="geometry" />
        </mxCell>

        <mxCell id="e1" value="payroll_payment_histories&#xa;pay date, period, nominal, status" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ede9fe;strokeColor=#7c3aed;fontSize=13;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="1660" y="890" width="250" height="74" as="geometry" />
        </mxCell>
        <mxCell id="e2" value="payroll_payment_bpjs_details&#xa;per component payroll BPJS audit" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#7c3aed;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1940" y="890" width="250" height="74" as="geometry" />
        </mxCell>
        <mxCell id="e3" value="thr_requests" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#7c3aed;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1660" y="1000" width="170" height="54" as="geometry" />
        </mxCell>
        <mxCell id="e4" value="thr_request_details" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#7c3aed;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1860" y="1000" width="180" height="54" as="geometry" />
        </mxCell>
        <mxCell id="e5" value="thr_payment_histories" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#7c3aed;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="2070" y="1000" width="180" height="54" as="geometry" />
        </mxCell>
        <mxCell id="e6" value="Slip, PDF, Tax Proof, Export" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#7c3aed;fontSize=13;" vertex="1" parent="1">
          <mxGeometry x="1760" y="1120" width="240" height="54" as="geometry" />
        </mxCell>

        <mxCell id="x1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#64748b;" edge="1" parent="1" source="a3" target="a4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#2563eb;" edge="1" parent="1" source="a2" target="b1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#2563eb;" edge="1" parent="1" source="a4" target="b1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#3b82f6;" edge="1" parent="1" source="b1" target="b2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#3b82f6;" edge="1" parent="1" source="b1" target="b3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#3b82f6;" edge="1" parent="1" source="b1" target="b4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#3b82f6;" edge="1" parent="1" source="b1" target="b5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#3b82f6;" edge="1" parent="1" source="b1" target="b6">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1d4ed8;" edge="1" parent="1" source="a8" target="b9">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1d4ed8;" edge="1" parent="1" source="b1" target="b9">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#3b82f6;" edge="1" parent="1" source="b9" target="b10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#16a34a;" edge="1" parent="1" source="b1" target="c1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#15803d;" edge="1" parent="1" source="c1" target="c2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#15803d;" edge="1" parent="1" source="c2" target="c3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#15803d;" edge="1" parent="1" source="b1" target="c4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#15803d;" edge="1" parent="1" source="b1" target="c5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d97706;" edge="1" parent="1" source="a6" target="a7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d97706;" edge="1" parent="1" source="a6" target="d1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d97706;" edge="1" parent="1" source="a7" target="d2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d97706;" edge="1" parent="1" source="c4" target="d1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#d97706;" edge="1" parent="1" source="c5" target="d1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="a5" target="b8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="b1" target="b7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="b7" target="b8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="b9" target="e1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="b7" target="e2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="a5" target="e2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="e1" target="e2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="b9" target="e3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="e3" target="e4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="e4" target="e5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="x32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#7c3aed;" edge="1" parent="1" source="e1" target="e6">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
