# Pindahkan data dari POS lain

> Pindahkan produk, pelanggan, pemasok, stok, dan riwayat transaksi dari POS lama ke satu outlet Bakasir, periksa hasilnya per outlet, lalu finalkan atau batalkan.

Source: https://docs.bakasir.com/id/docs/portal/migration

**Mesin Migrasi** memindahkan data dari POS lama Anda ke Bakasir dengan pemeriksaan sebelum dan sesudahnya. Satu migrasi mengisi satu outlet. Bila Anda punya dua database atau lebih (misalnya satu per toko), jalankan satu migrasi untuk tiap outlet, dan produk yang sama otomatis digabung.

**Tujuan:** data POS lama ada di outlet yang benar di Bakasir, dan angkanya sudah dicocokkan.

Tidak ada yang ditulis ke toko Anda sampai Anda menahan tombol terapkan. Sebelum itu Anda bisa meninjau semua masalah dan mencoba impor lebih dulu. Setelah diterapkan, semuanya masih bisa dibatalkan sampai Anda memfinalkan.

## Sebelum mulai

- Anda masuk ke **Portal Bisnis** sebagai **Owner**. Peran lain hanya bisa melihat daftar migrasi, tidak bisa memulai atau mengubahnya.
- Anda sudah mengekspor data dari POS lama. Produk wajib ada. Pelanggan, pemasok, dan stok disarankan. Bakasir mengenali hasil ekspor dari Moka, Qasir, Olsera, Majoo, Pawoon, Loyverse, dan lainnya.
- Format yang diterima: `.csv`, `.xlsx`, `.xls`, `.zip`, `.sql`, `.sqlite`, dan `.db`. Anda bisa mengunggah beberapa berkas sekaligus. Jangan ubah nama berkas aslinya. Satu berkas maksimal 2 GB, dan berkas besar dikirim bertahap serta bisa dilanjutkan bila koneksi terputus.
- Tentukan outlet tujuannya. Bila belum ada, Anda bisa membuatnya di langkah pertama. Outlet baru ditagih seperti outlet lain. Lihat [Pengaturan](https://docs.bakasir.com/id/docs/portal/settings.md). Outlet Demo tidak bisa menerima migrasi.
- Disarankan: jalankan backup dulu di **Pengaturan → Backup & Restore**.

## Langkah demi langkah




### Buka Mesin Migrasi

Buka **Katalog → Impor Produk** lalu klik **Pindah dari POS lain** pada banner di atas halaman. Tombol yang sama juga ada di **Pengaturan → Backup & Restore**.

Anda akan melihat halaman **Mesin Migrasi** dengan pesan bahwa tidak ada data yang ditulis ke toko sampai Anda menekan Terapkan, panel **Mulai migrasi**, dan daftar **Migrasi** sebelumnya.




### Pilih outlet tujuan

Ini langkah wajib di awal. Di **Outlet tujuan**, pilih outlet yang menerima data ini, atau pilih **Buat outlet baru** lalu isi **Nama outlet baru**. Klik **Mulai migrasi baru**.

Satu migrasi mengisi satu outlet. Database kedua untuk outlet lain memakai migrasi sendiri. Tombol baru aktif setelah outlet dipilih atau diberi nama.




### Unggah berkas

Di langkah **Unggah**, letakkan berkas di **Letakkan berkas di sini** atau klik **Pilih berkas**. Bila Anda tahu POS lama Anda, pilih di **POS sebelumnya**. Ini opsional: Bakasir mengenali sumbernya secara otomatis, dan memilihnya membantu bila deteksi kurang yakin serta menampilkan cara mengekspor berkas yang benar.

Pantau status tiap berkas (**Mengunggah**, **Diterima**, **Terbaca**, **Gagal**). Klik **Coba lagi** pada berkas yang gagal, lalu klik **Pindai berkas**.




### Periksa hasil pindai

Di langkah **Pindai**, Anda melihat **POS terdeteksi** (atau **POS tidak dikenali**, dan Anda tetap bisa lanjut) serta tabel **Berkas yang ditemukan** dengan isi dan jumlah baris tiap berkas. Bila ada pesan **Berkas wajib belum ada** atau **Berkas yang disarankan belum ada**, klik **Tambah berkas** atau **Kembali ke unggah**. Bila sudah benar, klik **Lanjut ke pemetaan**.




### Petakan kolom dan gudang

Di langkah **Pemetaan**, periksa kecocokan tiap kolom POS lama dengan kolom Bakasir. Hijau berarti cocok dengan yakin, jadi tinjau yang kuning dan merah. Untuk berkas yang tidak dikenali, pilih isinya di **Isi berkas ini**, atau pilih **Abaikan berkas ini**. Klik **Simpan pemetaan** untuk menyimpan.

Tombol **Saran AI** meminta AI menyarankan kecocokan untuk kolom yang tidak dikenali. AI hanya mengirim nama kolom, contoh isi kolom, dan daftar kolom Bakasir ke penyedia AI (OpenRouter), bukan berkas utuh. Anda harus menyetujuinya untuk tiap migrasi dan bisa **Cabut persetujuan** kapan saja. Fitur ini hanya tersedia bila Bakasir mengaktifkannya.

Di panel **Outlet dan nilai**, setiap gudang di data lama harus dipetakan ke tepat satu outlet. Tidak ada pencocokan lewat nama, jadi pilih sendiri satu per satu. Gudang yang belum dipilih ditandai **Wajib: pilih outlet**.

Setelah semua benar, klik **Simpan dan periksa data**.




### Tinjau masalah

Di langkah **Masalah**, Bakasir memeriksa data dan mengelompokkan temuannya:

- **Menghalangi**: harus diperbaiki sebelum diterapkan.
- **Peringatan**: tetap diimpor, mohon ditinjau.
- **Info**: sekadar informasi.

Filter tingkat dan jenis masalah, lihat kolom **Cara memperbaiki**, dan klik **Unduh CSV** untuk membawa daftarnya ke Excel. Bila ada yang menghalangi, klik **Kembali ke pemetaan**, perbaiki, lalu periksa lagi. Bila sudah bersih, klik **Lanjut ke pratinjau**.




### Coba impor dan tinjau hasil per outlet

Di langkah **Pratinjau**, klik **Coba impor**. Ini hanya uji coba dan belum menulis apa pun ke toko. Anda akan melihat:

- **Mode migrasi**: **Gabungkan dengan data yang ada** (data Bakasir yang sudah ada dipertahankan, data yang sama dihubungkan, yang baru ditambahkan) atau **Tulis ulang semua data**. Lihat [Mode tulis ulang](#mode-tulis-ulang).
- **Hasil per outlet**: yang akan diterima tiap outlet, yaitu omzet penjualan, nilai pembelian, dan stok, dibandingkan dengan sumber, plus alasan untuk setiap baris yang tidak diimpor. Tiap alasan ditandai **Dijelaskan** atau **Menghalangi**. Terapkan tetap diblokir selama ada alasan yang menghalangi.
- **Kode dan nomor yang berulang di berkas**: kode produk yang muncul lebih dari sekali (biasanya produk yang dihapus dan penggantinya) dan dokumen yang memakai nomor sama.
- **Produk dengan kode sama tetapi nama berbeda**: lihat [Kode sama, nama berbeda](#kode-sama-nama-berbeda).
- **Yang akan terjadi**: tabel jumlah baris yang **Dibuat**, **Ditautkan**, **Dilewati**, dan **Ditolak** untuk tiap jenis data, ditambah **Pratinjau hasil**.
- **Data ini tidak ikut dipindahkan**: daftar hal yang tidak terbawa. Centang **Saya mengerti data ini tidak akan diimpor ke Bakasir** untuk melanjutkan.

Bila ada perubahan di pemetaan, klik **Coba lagi**.




### Terapkan

Masih di langkah **Pratinjau**, tahan tombol **Tahan untuk terapkan migrasi** sampai penuh. Tombol hanya aktif bila tidak ada masalah yang menghalangi, pilihan nama sudah tersimpan, dan pernyataan data yang tidak terbawa sudah Anda centang.

Pantau prosesnya di langkah **Terapkan**. Bila impor berhenti di tengah jalan, tahan tombol terapkan lagi untuk melanjutkan.




### Periksa rekonsiliasi lalu finalkan atau batalkan

Di langkah **Terapkan**, **Laporan rekonsiliasi** membandingkan angka POS lama dengan Bakasir. Statusnya **Semuanya cocok**, **Terimpor dengan selisih yang perlu ditinjau**, atau **Ada pemeriksaan yang gagal**. Pemeriksaan dibuat **per outlet** ("Pemeriksaan untuk" nama outlet): jumlah dokumen, nilai dokumen, baris dokumen, stok dan nilai persediaan, harga outlet, dan baris yang tidak diimpor beserta alasannya. Kolom **Selisih** dan **Hasil** (**Cocok**, **Tinjau**, **Gagal**) menunjukkan mana yang perlu Anda cek.

Lalu pilih di panel **Finalkan atau batalkan**:

- **Finalkan** bila angkanya benar. Finalisasi permanen dan tidak bisa dibatalkan lagi. Bila ada data yang tidak terbawa, centang pernyataannya lebih dulu.
- **Batalkan migrasi** bila ada yang salah. Ketik nama toko untuk mengonfirmasi. Semua yang ditambahkan migrasi ini dihapus, dan statusnya menjadi **Dibatalkan**.




## Aturan antar outlet

- **Produk sama digabung.** Produk dicocokkan lewat kode (SKU atau barcode) yang sama persis, tanpa membedakan huruf besar atau kecil. Kode yang sama berarti satu produk, dengan stok dihitung per outlet. Nama produk memakai nama dari migrasi yang pertama diimpor.
- **Harga per outlet.** Bila harga di sumber berbeda dari harga umum, perbedaannya disimpan sebagai harga outlet (panel **Hasil per outlet** menyebut jumlahnya). Lihat [Harga per outlet](https://docs.bakasir.com/id/docs/portal/products.md#harga-per-outlet).
- **Data bersama.** Kategori dan merek digabung menurut nama. Pelanggan dicocokkan lewat telepon atau email, dan pemasok lewat kode atau nama. Data yang cocok ditautkan (kolom **Ditautkan**), bukan digandakan.
- **Riwayat.** Penjualan beserta pembayarannya, pembelian, dan penyesuaian stok ikut dipindahkan bila ada di berkas Anda.
- **Staf.** Staf hasil migrasi disematkan ke outlet tujuan.

### Nomor dokumen berawalan kode outlet

Nomor penjualan, pembelian, dan penyesuaian stok dari POS lama diberi awalan **Kode toko** outlet tujuan dan tanda hubung. Contoh: nomor `SL_1234` di outlet berkode `TOKOB` menjadi `TOKOB-SL_1234`. Nomor asli dari POS lama disimpan pada dokumen sebagai referensi eksternal. Awalan ini mencegah dua outlet yang punya nomor nota sama bertabrakan, dan aturan nomor unik per bisnis tidak berubah.

Bila dalam satu berkas ada nomor yang berulang, dokumen kedua diberi akhiran `~2`. Bila nomor sudah dipakai dokumen lain di Bakasir, barisnya ditolak dengan alasan **Nomor dokumen sudah dipakai dokumen lain**.

### Kode sama, nama berbeda

Bila ada produk yang sudah ada di Bakasir dengan kode yang sama tetapi nama yang sangat berbeda, panel **Produk dengan kode sama tetapi nama berbeda** menampilkan tabelnya: **Kode**, **Nama yang sudah ada**, **Nama di berkas ini**, dan **Kemiripan**. Di kolom **Nama yang dipakai**, pilih **Pakai nama yang sudah ada**, **Pakai nama di berkas ini**, atau **Tulis sendiri**. Klik **Simpan pilihan nama**. Tanpa pilihan, nama yang sudah ada tetap dipakai.

## Mode tulis ulang

**Tulis ulang semua data** menghapus seluruh data bisnis toko (produk, pelanggan, pemasok, transaksi penjualan, pembelian, biaya, dan staf) lalu mengisinya persis seperti berkas migrasi. Staf lama dinonaktifkan. Sebelum diterapkan, Bakasir membuat backup otomatis. Akun Owner, pengaturan, integrasi, dan langganan tetap aman, dan nama usaha serta nama toko mengikuti berkas.

Migrasi ini tidak bisa dibatalkan dengan **Batalkan migrasi**. Untuk kembali, pulihkan backup "pre-migration-replace" di **Pengaturan → Backup & Restore**. Tahan tombol **Tahan untuk menulis ulang data** untuk menerapkannya.

Mode ini tidak tersedia bila ada migrasi lain yang sudah diterapkan di bisnis Anda, atau bila outlet lain sudah berisi data. Untuk bisnis dengan beberapa outlet, pakai **Gabungkan dengan data yang ada**.

## Data yang tidak ikut dipindahkan

Bila ada di sumber Anda, hal berikut tidak dipindahkan dan tercantum di daftar sebelum Anda menerapkan: barcode tambahan (Bakasir menyimpan satu kode per produk), satuan ganda dan konversi satuan, modifier dan tambahan menu, resep dan bahan baku, biaya layanan, nomor seri, serta tabel lain seperti log, terjemahan, dan pengaturan aplikasi lama. Atur ulang yang Anda butuhkan setelah migrasi, misalnya di [Produk](https://docs.bakasir.com/id/docs/portal/products.md).

## Berapa lama berkas disimpan

Setelah migrasi **Final** atau **Dibatalkan**, berkas unggahan dan data kerjanya dihapus otomatis 7 hari kemudian. Migrasi yang menganggur 14 hari di status **Mengunggah**, **Siap dipetakan**, **Sudah diperiksa**, **Sudah dicoba**, atau **Gagal** dihapus seluruhnya. Data toko yang sudah masuk tidak ikut terhapus. Unduh daftar masalah (**Unduh CSV**) atau catat laporan rekonsiliasi yang Anda perlukan sebelum waktunya habis.

## Kesalahan umum dan solusinya

<Accordions type="single">
<Accordion title="Hanya pemilik yang bisa memulai atau mengubah migrasi">
Masuk sebagai Owner. Peran lain hanya melihat daftarnya.
</Accordion>
<Accordion title="Tombol terapkan tidak bisa ditahan">
Periksa tiga hal: tidak ada pesan **masalah yang menghalangi** (klik **Lihat masalahnya**), tidak ada alasan **Menghalangi** di **Hasil per outlet**, dan pilihan nama sudah disimpan dengan **Simpan pilihan nama**. Bila ada daftar **Data ini tidak ikut dipindahkan**, centang juga pernyataannya. Klik **Coba lagi** bila Anda baru mengubah pemetaan.
</Accordion>
<Accordion title="Gudang belum dipetakan ke outlet">
Kembali ke langkah **Pemetaan**, buka panel **Outlet dan nilai**, lalu pilih outlet untuk gudang itu. Dokumen dari gudang yang belum dipetakan ditolak.
</Accordion>
<Accordion title="Jenis berkas ini belum didukung, atau berkas kosong atau lebih dari 2 GB">
Pakai CSV, Excel, ZIP, dump SQL, atau SQLite. Pecah berkas yang lebih besar dari 2 GB atau ekspor ulang per tabel. Bila dump SQL tidak terbaca, ekspor ulang dengan phpMyAdmin atau mysqldump.
</Accordion>
<Accordion title="Impor berhenti di tengah jalan">
Tahan tombol terapkan lagi untuk melanjutkan. Bila gagal pada uji coba, periksa pemetaan lalu klik **Coba impor** lagi.
</Accordion>
<Accordion title="Mode ganti tidak tersedia">
Mode **Tulis ulang semua data** diblokir bila ada migrasi lain yang sudah diterapkan atau outlet lain sudah berisi data. Pakai **Gabungkan dengan data yang ada**.
</Accordion>
<Accordion title="Pembatalan diblokir">
Data hasil impor sudah dipakai penjualan, pembelian, atau pergerakan stok sungguhan di outlet itu setelah migrasi, jadi tidak aman dihapus. Selain itu, migrasi tulis ulang tidak bisa dibatalkan: pulihkan backup otomatisnya. Pembatalan hanya menghapus dokumen, stok, dan harga outlet milik migrasi ini. Produk yang masih dipakai migrasi lain atau outlet lain tetap ada.
</Accordion>
<Accordion title="Outlet demo tidak bisa menerima migrasi">
Pilih outlet asli Anda, atau buat outlet baru lewat **Buat outlet baru**.
</Accordion>
<Accordion title="Migrasi ini belum punya outlet tujuan">
Migrasi lama tanpa outlet tujuan tidak bisa dilanjutkan. Hapus migrasinya dari daftar (ikon tempat sampah) dan mulai yang baru.
</Accordion>
</Accordions>

## Tips

- **Mulai dari outlet yang datanya paling lengkap.** Namanya akan dipakai untuk produk yang sama di outlet berikutnya.
- **Cek angka sebelum final.** Bandingkan omzet, nilai pembelian, dan nilai persediaan di laporan rekonsiliasi dengan laporan POS lama Anda.
- **Berkas yang sama dua kali aman.** Dokumen yang sudah pernah diimpor ke outlet itu dilewati dengan alasan **Sudah diimpor ke outlet ini**.

## Langkah berikutnya

- [Tambah dan kelola produk](https://docs.bakasir.com/id/docs/portal/products.md)
- [Kendalikan stok Anda](https://docs.bakasir.com/id/docs/portal/inventory.md)
- [Pengaturan](https://docs.bakasir.com/id/docs/portal/settings.md)
