<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>fscm development docs</title>
    <link>https://fscm-dev-docs.pages.dev/</link>
    <description>Recent content on fscm development docs</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://fscm-dev-docs.pages.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Arsitektur Sistem</title>
      <link>https://fscm-dev-docs.pages.dev/docs/01-arsitektur-sistem/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/01-arsitektur-sistem/</guid>
      <description>&lt;h1 id=&#34;arsitektur-sistem-fscm&#34;&gt;Arsitektur Sistem FSCM &lt;a href=&#34;#arsitektur-sistem-fscm&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Dokumen ini menjelaskan gambaran umum bagaimana sistem aplikasi dirancang dan berinteraksi antara komponen-komponen utamanya.&lt;/p&gt;&#xA;&lt;h2 id=&#34;topologi-aplikasi&#34;&gt;Topologi Aplikasi &lt;a href=&#34;#topologi-aplikasi&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Proyek ini terbagi ke dalam empat wilayah (repository) utama:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;fscm_frontend&lt;/code&gt;&lt;/strong&gt; — React 18 + Vite 5, SPA (Single Page Application). Berjalan di browser pengguna. Menggunakan Bootstrap 5 untuk UI, native &lt;code&gt;fetch&lt;/code&gt; API untuk HTTP, dan SignalR untuk real-time.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;btb_backend&lt;/code&gt;&lt;/strong&gt; — .NET 8 (C#), Service-Repository Pattern. Server API utama dengan 41 Controller, 17+ SignalR Hub, dan dual auth (JWT + ApiKey). Menggunakan Dapper untuk akses database via Stored Procedure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Fscm.DatabaseMigration&lt;/code&gt;&lt;/strong&gt; — .NET 8 Console App dengan DbUp. Mengelola skema database secara terpisah dari backend utama.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Vendor API / Infor&lt;/strong&gt; — Sistem ERP pusat perusahaan (Master Data). Diakses oleh backend via HttpClient dengan Basic Auth.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;alur-data-secara-umum&#34;&gt;Alur Data Secara Umum &lt;a href=&#34;#alur-data-secara-umum&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;&#xA;  &lt;div class=&#34;prism-codeblock &#34;&gt;&#xA;  &lt;pre id=&#34;bf4d223&#34; class=&#34;language- &#34;&gt;&#xA;  &lt;code&gt;┌──────────────┐     HTTPS/WSS      ┌──────────────┐     Dapper/SP     ┌──────────────┐&#xA;│   Frontend   │ ◄──────────────► │   Backend    │ ◄─────────────► │  SQL Server  │&#xA;│  (React 18)  │   JWT Bearer      │  (.NET 8)    │                  │  (Database)  │&#xA;└──────────────┘                    └──────┬───────┘                  └──────────────┘&#xA;                                          │ HttpClient&#xA;                                          │ Basic Auth&#xA;                                          ▼&#xA;                                   ┌──────────────┐&#xA;                                   │  Infor API   │&#xA;                                   │  (Vendor)    │&#xA;                                   └──────────────┘&lt;/code&gt;&#xA;  &lt;/pre&gt;&#xA;  &lt;/div&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pengguna berinteraksi dengan &lt;strong&gt;Frontend&lt;/strong&gt; (React) melalui peramban.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frontend&lt;/strong&gt; memanggil &lt;em&gt;endpoint&lt;/em&gt; API yang disediakan oleh &lt;strong&gt;Backend&lt;/strong&gt; (&lt;code&gt;btb_backend&lt;/code&gt;) dengan menyertakan JWT Token.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Backend&lt;/strong&gt; memverifikasi token melalui pipeline middleware: &lt;code&gt;JwtBlacklistMiddleware&lt;/code&gt; → &lt;code&gt;Authentication&lt;/code&gt; → &lt;code&gt;Authorization&lt;/code&gt; → &lt;code&gt;RateLimiter&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Jika otorisasi lolos, &lt;strong&gt;Backend&lt;/strong&gt; mengakses &lt;strong&gt;Database Lokal (SQL Server)&lt;/strong&gt; melalui layer Service → Repository (menggunakan Dapper + Stored Procedures).&lt;/li&gt;&#xA;&lt;li&gt;Untuk data yang butuh sinkronisasi dengan Infor, Backend memiliki dua jalur:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Real-time:&lt;/strong&gt; Langsung hit API Infor via &lt;code&gt;VendorApiRepository&lt;/code&gt; (HttpClient + Basic Auth).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Batch/Lokal:&lt;/strong&gt; Mengambil data dari tabel staging &lt;code&gt;Dojo*&lt;/code&gt; yang sudah disinkronisasi via SQL Server Agent/Job.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;middleware-pipeline-urutan-di-programcs&#34;&gt;Middleware Pipeline (Urutan di &lt;code&gt;Program.cs&lt;/code&gt;) &lt;a href=&#34;#middleware-pipeline-urutan-di-programcs&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;&#xA;  &lt;div class=&#34;prism-codeblock &#34;&gt;&#xA;  &lt;pre id=&#34;85fde9e&#34; class=&#34;language- &#34;&gt;&#xA;  &lt;code&gt;Request masuk&#xA;  → CORS (&amp;#34;AllowFrontend&amp;#34;)&#xA;  → Static Files (wwwroot/uploads)&#xA;  → JwtBlacklistMiddleware (cek token blacklist)&#xA;  → Authentication (JWT Bearer / ApiKey)&#xA;  → Authorization (Role-based)&#xA;  → RateLimiter (loginPolicy: 5 req/5 detik)&#xA;  → SignalR Hubs (17 endpoint WebSocket)&#xA;  → Controllers (41 endpoint REST API)&lt;/code&gt;&#xA;  &lt;/pre&gt;&#xA;  &lt;/div&gt;</description>
    </item>
    <item>
      <title>Manajemen Pengguna &amp; Otorisasi</title>
      <link>https://fscm-dev-docs.pages.dev/docs/02-manajemen-pengguna/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/02-manajemen-pengguna/</guid>
      <description>&lt;h1 id=&#34;manajemen-pengguna--otorisasi-menu&#34;&gt;Manajemen Pengguna &amp;amp; Otorisasi Menu &lt;a href=&#34;#manajemen-pengguna--otorisasi-menu&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Sistem FSCM menggunakan &lt;strong&gt;JWT (JSON Web Token)&lt;/strong&gt; untuk autentikasi dan &lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt; untuk otorisasi menu secara dinamis melalui database.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-analisis-database-tabel-sso&#34;&gt;1. Analisis Database (Tabel SSO) &lt;a href=&#34;#1-analisis-database-tabel-sso&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Aplikasi ini mengadopsi model &lt;em&gt;Single Sign-On (SSO)&lt;/em&gt; sederhana menggunakan beberapa tabel utama:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;sso_msuser&lt;/code&gt;&lt;/strong&gt;: Menyimpan data pengguna (kredensial sandi). Tabel ini menggunakan &lt;em&gt;Composite Primary Key&lt;/em&gt; yaitu &lt;code&gt;(usr_id, rol_id, app_id)&lt;/code&gt;. Artinya, satu entitas fisik (Karyawan/Supplier) bisa memiliki beberapa peran (Role) yang berbeda di dalam beberapa aplikasi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;sso_msrole&lt;/code&gt;&lt;/strong&gt;: Menyimpan referensi Role (seperti Admin, Approver, Supplier, dsb) melalui &lt;code&gt;rol_id&lt;/code&gt;. Beberapa contoh &lt;em&gt;role&lt;/em&gt; krusial:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;ROL02 (SUPPLIER)&lt;/strong&gt;: Role untuk pihak eksternal/Vendor.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ROL01 (Admin)&lt;/strong&gt;: Pengelola sistem keseluruhan.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ROL03 (MEMBER PPIC FILTER)&lt;/strong&gt;: Pengelola inventaris dan jadwal produksi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ROL27 (SECURITY)&lt;/strong&gt;: Satpam/Keamanan yang mengurus &lt;em&gt;Check-in/Check-out&lt;/em&gt; truk vendor di gerbang.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;QA / QC / PROCUREMENT&lt;/strong&gt;: Divisi terkait yang mengontrol kualitas barang dan order pembelian.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;sso_msmenu&lt;/code&gt;&lt;/strong&gt;: Tabel krusial yang mendefinisikan menu. Menu didefinisikan secara eksplisit untuk setiap peran dan aplikasi (&lt;code&gt;app_id&lt;/code&gt; dan &lt;code&gt;rol_id&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;2-asal-usul-pengguna-cara-pendaftaran&#34;&gt;2. Asal-Usul Pengguna (Cara Pendaftaran) &lt;a href=&#34;#2-asal-usul-pengguna-cara-pendaftaran&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Proses pembuatan user (akun login) &lt;strong&gt;TIDAK BISA sembarangan&lt;/strong&gt;. Prosesnya harus diawali dari adanya data master.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migrasi Database</title>
      <link>https://fscm-dev-docs.pages.dev/docs/03-migrasi-database/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/03-migrasi-database/</guid>
      <description>&lt;h1 id=&#34;panduan-migrasi-database-fscmdatabasemigration&#34;&gt;Panduan Migrasi Database (Fscm.DatabaseMigration) &lt;a href=&#34;#panduan-migrasi-database-fscmdatabasemigration&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Proyek ini menggunakan alat terpisah bernama &lt;code&gt;Fscm.DatabaseMigration&lt;/code&gt; untuk melakukan perubahan skema database (DDL) atau penyisipan data awal (DML). Proyek ini dibangun menggunakan .NET dan pustaka &lt;strong&gt;DbUp&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Keuntungan menggunakan DbUp adalah setiap perubahan disimpan dalam bentuk file &lt;code&gt;.sql&lt;/code&gt; murni yang terurut berdasarkan waktu pembuatannya (timestamp).&lt;/p&gt;&#xA;&lt;h2 id=&#34;struktur-proyek-fscmdatabasemigration&#34;&gt;Struktur Proyek &lt;code&gt;Fscm.DatabaseMigration&lt;/code&gt; &lt;a href=&#34;#struktur-proyek-fscmdatabasemigration&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Program.cs&lt;/code&gt;&lt;/strong&gt;: Kode utama yang menjalankan DbUp, membaca koneksi database dari &lt;code&gt;appsettings.json&lt;/code&gt; atau &lt;em&gt;Environment Variable&lt;/em&gt;, dan mengeksekusi semua &lt;em&gt;script&lt;/em&gt; SQL yang belum pernah dijalankan.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;scripts/&lt;/code&gt;&lt;/strong&gt;: Folder tempat semua file &lt;code&gt;.sql&lt;/code&gt; disimpan.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;create-migration.sh&lt;/code&gt; / &lt;code&gt;.bat&lt;/code&gt;&lt;/strong&gt;: Script bantuan (utility) untuk mempercepat pembuatan file &lt;code&gt;.sql&lt;/code&gt; kosong dengan format nama yang benar (menggunakan timestamp).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;appsettings.json&lt;/code&gt;&lt;/strong&gt;: File tempat mendefinisikan string koneksi (&lt;code&gt;DefaultConnection&lt;/code&gt;) menuju &lt;em&gt;local database&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cara-menambahkan-tabel-atau-perubahan-database&#34;&gt;Cara Menambahkan Tabel atau Perubahan Database &lt;a href=&#34;#cara-menambahkan-tabel-atau-perubahan-database&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Jika kamu perlu membuat tabel baru, menambahkan kolom, atau membuat &lt;em&gt;Store Procedure&lt;/em&gt;, ikuti langkah berikut:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pengembangan Backend</title>
      <link>https://fscm-dev-docs.pages.dev/docs/04-pengembangan-backend/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/04-pengembangan-backend/</guid>
      <description>&lt;h1 id=&#34;panduan-pengembangan-backend-btb_backend&#34;&gt;Panduan Pengembangan Backend (&lt;code&gt;btb_backend&lt;/code&gt;) &lt;a href=&#34;#panduan-pengembangan-backend-btb_backend&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Backend dibangun menggunakan &lt;strong&gt;.NET 8 (C#)&lt;/strong&gt; dengan arsitektur &lt;strong&gt;Service-Repository Pattern&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;struktur-folder-proyek&#34;&gt;Struktur Folder Proyek &lt;a href=&#34;#struktur-folder-proyek&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;&#xA;  &lt;div class=&#34;prism-codeblock &#34;&gt;&#xA;  &lt;pre id=&#34;3599523&#34; class=&#34;language- &#34;&gt;&#xA;  &lt;code&gt;btb_backend/&#xA;├── Controllers/          → 41 controller (routing HTTP)&#xA;├── Services/&#xA;│   ├── Interfaces/       → Kontrak/Interface service&#xA;│   └── Implementations/  → Implementasi logika bisnis&#xA;├── Repositories/&#xA;│   ├── Interfaces/       → Kontrak/Interface repository&#xA;│   └── Implementations/  → Implementasi akses data (Dapper)&#xA;├── DTOs/                 → Data Transfer Object (request/response)&#xA;├── Models/               → Entity/Model domain&#xA;├── Hubs/                 → SignalR Hub (real-time WebSocket)&#xA;├── Helpers/              → Utility &amp;amp; middleware pendukung&#xA;├── Program.cs            → Entry point, DI, middleware pipeline&#xA;├── JwtBlacklistMiddleware.cs → Middleware blacklist token JWT&#xA;├── appsettings.json      → Konfigurasi aplikasi&#xA;└── wwwroot/uploads/      → File statis (surat jalan, checksheet)&lt;/code&gt;&#xA;  &lt;/pre&gt;&#xA;  &lt;/div&gt;&#xA;&lt;h2 id=&#34;lapisan-arsitektur&#34;&gt;Lapisan Arsitektur &lt;a href=&#34;#lapisan-arsitektur&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Controllers (&lt;code&gt;/Controllers&lt;/code&gt;)&lt;/strong&gt;: Menangani &lt;em&gt;routing&lt;/em&gt; HTTP dan memanggil Service. Dilarang menaruh logika bisnis berat atau &lt;em&gt;query&lt;/em&gt; database di sini.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Services (&lt;code&gt;/Services&lt;/code&gt;)&lt;/strong&gt;: Logika bisnis utama. Menerima data dari Controller, melakukan validasi/kalkulasi, dan memanggil Repository.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Repositories (&lt;code&gt;/Repositories&lt;/code&gt;)&lt;/strong&gt;: Lapisan akses data. Berkomunikasi dengan SQL Server menggunakan &lt;strong&gt;Dapper&lt;/strong&gt; dan &lt;strong&gt;raw SqlCommand&lt;/strong&gt; untuk memanggil Stored Procedure. (&lt;strong&gt;Catatan:&lt;/strong&gt; Proyek ini TIDAK menggunakan Entity Framework Core.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DTOs (&lt;code&gt;/DTOs&lt;/code&gt;)&lt;/strong&gt;: Kelas model untuk &lt;em&gt;request&lt;/em&gt; dan &lt;em&gt;response&lt;/em&gt; payload.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hubs (&lt;code&gt;/Hubs&lt;/code&gt;)&lt;/strong&gt;: Endpoint SignalR (WebSocket) untuk fitur &lt;em&gt;real-time&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Helpers (&lt;code&gt;/Helpers&lt;/code&gt;)&lt;/strong&gt;: Berisi utility penting:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ApiAuthHandler.cs&lt;/code&gt; — Autentikasi via header &lt;code&gt;X-API-KEY&lt;/code&gt; untuk akses portal eksternal (Supplier).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;EncryptionHelper.cs&lt;/code&gt; — Dekripsi AES-CBC kredensial login dari frontend.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JwtHelper.cs&lt;/code&gt; — Utilitas pembuatan dan validasi JWT.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SanitizerHelper.cs&lt;/code&gt; — Sanitasi input untuk keamanan.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;HasPermissionRequirement.cs&lt;/code&gt; &amp;amp; &lt;code&gt;RequiresPermissionAttribute.cs&lt;/code&gt; — Atribut otorisasi berbasis permission.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;skema-autentikasi-ganda-jwt--apikey&#34;&gt;Skema Autentikasi Ganda (JWT + ApiKey) &lt;a href=&#34;#skema-autentikasi-ganda-jwt--apikey&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Backend mendukung &lt;strong&gt;dua skema autentikasi&lt;/strong&gt; yang didaftarkan di &lt;code&gt;Program.cs&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pengembangan Frontend</title>
      <link>https://fscm-dev-docs.pages.dev/docs/05-pengembangan-frontend/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/05-pengembangan-frontend/</guid>
      <description>&lt;h1 id=&#34;panduan-pengembangan-frontend-fscm_frontend&#34;&gt;Panduan Pengembangan Frontend (&lt;code&gt;fscm_frontend&lt;/code&gt;) &lt;a href=&#34;#panduan-pengembangan-frontend-fscm_frontend&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Frontend dibangun menggunakan &lt;strong&gt;React 18&lt;/strong&gt; yang di-&lt;em&gt;bundle&lt;/em&gt; dengan &lt;strong&gt;Vite 5&lt;/strong&gt;. Antarmuka (UI) memanfaatkan &lt;strong&gt;Bootstrap 5&lt;/strong&gt;, dan komunikasi HTTP menggunakan &lt;strong&gt;native &lt;code&gt;fetch&lt;/code&gt; API&lt;/strong&gt; melalui wrapper &lt;code&gt;UseFetch.js&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;struktur-folder-proyek&#34;&gt;Struktur Folder Proyek &lt;a href=&#34;#struktur-folder-proyek&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;&#xA;  &lt;div class=&#34;prism-codeblock &#34;&gt;&#xA;  &lt;pre id=&#34;b6cd331&#34; class=&#34;language- &#34;&gt;&#xA;  &lt;code&gt;fscm_frontend/&#xA;├── .env                          → Variabel environment (API_LINK, SECRET_KEY)&#xA;├── index.html                    → HTML entry point&#xA;├── vite.config.js                → Konfigurasi Vite (port, base path, obfuscation)&#xA;├── package.json                  → Dependensi npm&#xA;└── src/&#xA;    ├── App.jsx                   → Shell utama, auth logic, tab navigation&#xA;    ├── main.jsx                  → React DOM entry point&#xA;    ├── index.css                 → Styling global&#xA;    ├── assets/                   → Aset statis (gambar, font)&#xA;    └── component/&#xA;        ├── backbone/             → Komponen layout (7 file)&#xA;        │   ├── Header.jsx        → Header dengan logo, nama user, tombol logout&#xA;        │   ├── SideBar.jsx       → Sidebar navigasi dinamis&#xA;        │   ├── Menu.jsx          → Render menu tree hierarkis&#xA;        │   ├── Layout.jsx        → Wrapper layout utama&#xA;        │   ├── Container.jsx     → Container konten&#xA;        │   ├── ContentBody.jsx   → Body area konten&#xA;        │   └── ContentTitle.jsx  → Judul halaman&#xA;        ├── page/                 → Modul halaman fitur (82 folder)&#xA;        ├── part/                 → Komponen UI reusable (34 file)&#xA;        └── util/                 → Utility &amp;amp; helper (15 file)&#xA;            ├── UseFetch.js       → HTTP client wrapper (native fetch &amp;#43; JWT auto-attach)&#xA;            ├── CreateMenu.js     → Pemanggil API menu &amp;#43; transformasi&#xA;            ├── CreateRoute.jsx   → Definisi semua route (~70 route, lazy-loaded)&#xA;            ├── MenuMapper.js     → Transformasi data menu flat → tree hierarkis&#xA;            ├── ProtectedRoute.jsx→ Guard route berbasis hak akses menu&#xA;            ├── Constants.js      → Konstanta (API_LINK, ROOT_LINK, APP_ID)&#xA;            ├── Encryptor.js      → Enkripsi AES kredensial login (crypto-js)&#xA;            ├── CheckAccess.js    → Pengecekan hak akses user terhadap path&#xA;            ├── SweetAlert.js     → Wrapper SweetAlert2&#xA;            ├── Formatting.js     → Format angka/tanggal&#xA;            ├── ValidateForm.js   → Validasi form&#xA;            └── UploadFile.js     → Helper upload file&lt;/code&gt;&#xA;  &lt;/pre&gt;&#xA;  &lt;/div&gt;&#xA;&lt;h2 id=&#34;mekanisme-http-client-usefetchjs&#34;&gt;Mekanisme HTTP Client (&lt;code&gt;UseFetch.js&lt;/code&gt;) &lt;a href=&#34;#mekanisme-http-client-usefetchjs&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Frontend &lt;strong&gt;TIDAK menggunakan Axios&lt;/strong&gt; sebagai mekanisme utama. Sistem menggunakan &lt;strong&gt;native browser &lt;code&gt;fetch&lt;/code&gt; API&lt;/strong&gt; yang dibungkus dalam &lt;code&gt;UseFetch.js&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sinkronisasi Infor (Vendor API)</title>
      <link>https://fscm-dev-docs.pages.dev/docs/06-sinkronisasi-infor/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/06-sinkronisasi-infor/</guid>
      <description>&lt;h1 id=&#34;sinkronisasi-infor-vendor-api&#34;&gt;Sinkronisasi Infor (Vendor API) &lt;a href=&#34;#sinkronisasi-infor-vendor-api&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Sistem database lokal (FSCM) berintegrasi dengan &lt;strong&gt;Infor (Vendor API)&lt;/strong&gt; sebagai &lt;em&gt;System of Record&lt;/em&gt; / Master Data pusat.&lt;/p&gt;&#xA;&lt;h2 id=&#34;apakah-frontend-akses-infor-langsung&#34;&gt;Apakah Frontend Akses Infor Langsung? &lt;a href=&#34;#apakah-frontend-akses-infor-langsung&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Tidak.&lt;/strong&gt; Secara arsitektur, frontend (&lt;code&gt;fscm_frontend&lt;/code&gt;) tidak boleh melakukan request HTTP langsung ke Infor. Semua komunikasi dengan Infor wajib dijembatani oleh backend (&lt;code&gt;btb_backend&lt;/code&gt;). Alasannya:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Keamanan:&lt;/strong&gt; Kredensial basic auth (&lt;code&gt;FSCM_Cirebon:noberiC_MCSF&lt;/code&gt;) dan base URL Infor disembunyikan di layer backend.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CORS:&lt;/strong&gt; Kebanyakan API internal vendor tidak mengizinkan akses direct dari browser.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data Formatting:&lt;/strong&gt; Backend bertugas merapikan dan memformat response JSON dari Infor agar sesuai kebutuhan visual frontend.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;pemetaan-implementasi-api-berdasarkan-dokumen-spesifikasi&#34;&gt;Pemetaan Implementasi API (Berdasarkan Dokumen Spesifikasi) &lt;a href=&#34;#pemetaan-implementasi-api-berdasarkan-dokumen-spesifikasi&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Berdasarkan dokumen spesifikasi &lt;code&gt;API Specification FSCM 29062026.DOCX&lt;/code&gt;, berikut adalah status implementasi endpoint pada kelas &lt;code&gt;VendorApiRepository.cs&lt;/code&gt; di backend:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Skema &amp; Struktur Database</title>
      <link>https://fscm-dev-docs.pages.dev/docs/07-skema-database/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/07-skema-database/</guid>
      <description>&lt;h1 id=&#34;skema--struktur-database-fscm-lokal&#34;&gt;Skema &amp;amp; Struktur Database (FSCM Lokal) &lt;a href=&#34;#skema--struktur-database-fscm-lokal&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Berdasarkan analisis file &lt;em&gt;dump&lt;/em&gt; SQL &lt;code&gt;DB_Digitalisasi_Dashboard_FSCM&lt;/code&gt;, database aplikasi dirancang dengan arsitektur penamaan &lt;em&gt;(naming convention)&lt;/em&gt; yang sangat terstruktur. Setiap tabel di dalam sistem menggunakan awalan &lt;em&gt;(prefix)&lt;/em&gt; tertentu untuk mengelompokkan fungsinya.&lt;/p&gt;&#xA;&lt;p&gt;Berikut adalah 4 kelompok utama tabel di dalam &lt;em&gt;database&lt;/em&gt; sistem ini:&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-tabel-sso-single-sign-on--akses---sso_&#34;&gt;1. Tabel SSO (Single Sign-On &amp;amp; Akses) - &lt;code&gt;sso_&lt;/code&gt; &lt;a href=&#34;#1-tabel-sso-single-sign-on--akses---sso_&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Kelompok tabel ini bertugas murni untuk mengurus otentikasi, otorisasi, manajemen menu, dan jejak &lt;em&gt;(session)&lt;/em&gt; login pengguna.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Estimasi Pengumpulan Bahan (BOM)</title>
      <link>https://fscm-dev-docs.pages.dev/docs/08-estimasi-bom-gudang/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fscm-dev-docs.pages.dev/docs/08-estimasi-bom-gudang/</guid>
      <description>&lt;h1 id=&#34;proyek-lanjutan-estimasi-pengumpulan-bahan-bom-oleh-gudang&#34;&gt;Proyek Lanjutan: Estimasi Pengumpulan Bahan (BOM) oleh Gudang &lt;a href=&#34;#proyek-lanjutan-estimasi-pengumpulan-bahan-bom-oleh-gudang&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Dokumen ini memuat konsep arsitektur, pemodelan basis data, alur sinkronisasi data Infor, serta panduan implementasi untuk fitur &lt;strong&gt;Estimasi Pengumpulan Bahan (BOM)&lt;/strong&gt; oleh petugas gudang.&lt;/p&gt;&#xA;&lt;h2 id=&#34;referensi-mockup-excel&#34;&gt;Referensi Mockup Excel &lt;a href=&#34;#referensi-mockup-excel&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;&#xA;&#xA;&#xA;  &#xA;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-pembagian-peran-ppcppic-vs-gudang&#34;&gt;1. Pembagian Peran (PPC/PPIC vs Gudang) &lt;a href=&#34;#1-pembagian-peran-ppcppic-vs-gudang&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Peran&lt;/th&gt;&#xA;          &lt;th&gt;Tugas&lt;/th&gt;&#xA;          &lt;th&gt;Di Fitur Ini&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;PPC / PPIC&lt;/strong&gt; (Production Planning &amp;amp; Inventory Control)&lt;/td&gt;&#xA;          &lt;td&gt;Perencana. Menganalisis pesanan pelanggan, memeriksa kapasitas mesin, merilis &lt;strong&gt;Work Order (WO)&lt;/strong&gt; / Production Order ke sistem.&lt;/td&gt;&#xA;          &lt;td&gt;Menentukan produk jadi apa yang harus dibuat (&lt;code&gt;Finished Goods&lt;/code&gt;, prefix &lt;code&gt;F&lt;/code&gt;) dan berapa jumlahnya (&lt;code&gt;QTY Plan&lt;/code&gt;). Data WO diambil dari &lt;strong&gt;API PRO&lt;/strong&gt; Infor.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Petugas Gudang&lt;/strong&gt; (Warehouse Picker)&lt;/td&gt;&#xA;          &lt;td&gt;Eksekutor lapangan. Mencari, mengumpulkan, dan memverifikasi bahan fisik di gudang.&lt;/td&gt;&#xA;          &lt;td&gt;Melihat daftar WO di dashboard → Klik &lt;strong&gt;Start&lt;/strong&gt; → Mengumpulkan bahan BOM satu per satu → Mencatat &lt;code&gt;QTY_ACT&lt;/code&gt; → Melaporkan masalah jika ada → Klik &lt;strong&gt;Finish&lt;/strong&gt; → &lt;strong&gt;Transfer&lt;/strong&gt; ke area Produksi.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-api-eksternal-yang-dibutuhkan-dari-mockup&#34;&gt;2. API Eksternal yang Dibutuhkan (dari Mockup) &lt;a href=&#34;#2-api-eksternal-yang-dibutuhkan-dari-mockup&#34; class=&#34;anchor&#34; aria-hidden=&#34;true&#34;&gt;&lt;i class=&#34;material-icons align-middle&#34;&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Berdasarkan mockup, terdapat &lt;strong&gt;6 sumber data/API&lt;/strong&gt; yang diperlukan:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
