# İş emirleri

> ERP iş emirlerini dosyadan, API'den ya da zamanlanmış okumayla Proxus'a alın; üretileni sahadaki formlar bildirsin.

Kaynak: https://proxus.io/tr/docs/organize/work-orders

**İş emri**, ERP'nizin planladığı şekilde neyin, kaç adet, hangi makinede ve ne zaman üretileceğini söyler (ISA-95'te
iş emri, *job order*). Proxus planı tutar ve sahanın formlarla bildirdiklerini ekler: emrin gerçekte ne zaman başlayıp
bittiği, iyi ve fire miktarları. Ekran **Varlık yapısı > İş emirleri** menüsündedir.

*Ekran görüntüsü: İş emirleri listesi: Pres 4'te Braket A12 için WO-1001 emri tamamlanmış, 1.000 planlanan, 940 iyi, ilerleme yüzde 94*

1. **Yeni** elle bir iş emri ekler.
2. **Dosyadan al**, bir [CSV dosyasından](#dosyadan-alma) iş emri ekler ya da günceller.
3. **Durum**, emrin nerede olduğudur.
4. **İlerleme**, iyi miktarın planlanan miktara oranıdır.

## İş emrinin alanları

| Alan | Anlamı |
| --- | --- |
| **İş emri no** | ERP'nin emre verdiği numara. Zorunludur, en çok 64 karakterdir ve tekrarlanmaz. |
| **Ürün** | Üretilen şey: ERP'deki malzeme ya da ürün kodu. |
| **Açıklama** | Serbest metin. |
| **Planlanan miktar**, **Birim** | Kaç adet üretileceği ve hangi birimde. |
| **Planlanan başlangıç**, **Planlanan bitiş** | Planın emri çalıştırdığı zaman, merkez sunucunun yerel saatiyle. |
| **Cihaz** | Üretimin yapıldığı makine ya da hat. Boşsa herhangi biri. |
| **Durum** | **Yayınlandı**, **Çalışıyor**, **Beklemede**, **Tamamlandı** ya da **İptal edildi**. |
| **İyi miktar**, **Fire miktarı** | Formların bildirdiği üretim. Salt okunurdur. |
| **Gerçek başlangıç**, **Gerçek bitiş** | Formların bildirdiği gerçek başlama ve bitiş zamanı. Salt okunurdur. |
| **İlerleme** | İyi miktar ÷ planlanan miktar. Planlanan miktar yoksa boştur. |
| **Kaynak** | Emrin nasıl geldiği: **Elle**, **İçe aktarma**, **API** ya da **ERP'den okundu**. |

Planı kişiler değiştirir. Miktarları ve gerçek zamanları yalnızca Proxus, iş emirlerine bağlı formlardan yazar.

### Durumlar

| Durum | Anlamı | Formlar bildirebilir |
| --- | --- | --- |
| **Yayınlandı** | Planlandı ve sahaya verildi; henüz üretim yok. | Evet |
| **Çalışıyor** | Sahada başladı. | Evet |
| **Beklemede** | Başladı, sonra yeni bir karara kadar durdu. | Evet |
| **Tamamlandı** | Bitti. | Hayır |
| **İptal edildi** | Üretilmeyecek. | Hayır |

Formlar yalnızca yayınlanmış, çalışan ya da bekleyen emirleri sunar.

## Dosyadan alma

ERP'nin listesini ya da bir tabloyu CSV olarak kaydedin (Excel'de **Farklı kaydet > CSV**) ve **Dosyadan al**'ı
seçin. Her satır bir iş emridir. Numarası zaten olan emir yeni planı alır; diğer numaralar yeni, yayınlanmış emir
olarak eklenir.

İlk satır sütun adlarıdır. Yalnızca iş emri numarası zorunludur; diğer sütunlar olmayabilir ya da herhangi bir sırada
olabilir. Sütun adları Türkçe ya da İngilizce okunur:

| Sütun | Bunlar da kabul edilir |
| --- | --- |
| İş emri no | İş emri, Emir no, Sipariş no, Order Number, Number, Order, Work Order |
| Ürün | Malzeme, Product, Material |
| Açıklama | Description |
| Miktar | Planlanan miktar, Quantity, Planned Quantity |
| Birim | Unit |
| Başlangıç | Planlanan başlangıç, Start, Planned Start |
| Bitiş | Planlanan bitiş, End, Planned End |
| Cihaz | Makine, Hat, Device, Machine, Line |
| Durum | Status |

- Hücreler, Excel'in iki dilde de kaydettiği gibi virgül, noktalı virgül ya da sekmeyle ayrılabilir. Tırnak içindeki
  hücreler ayıracı içerebilir.
- Sayılar ve tarihler dilinizin biçiminde (*1.250,5* ve *25.10.2026 08:00*) ya da değişmez biçimde (*1250.5*,
  *2026-10-25T08:00*) okunur.
- **Cihaz**, **Cihazlar** ekranındaki adıyla ya da kimliğiyle yazılır.
- **Durum** *Yayınlandı*, *Beklemede*, *Tamamlandı* ya da *İptal* olabilir; aynı durumlar İngilizce de yazılabilir.
- Boş hücreler emri olduğu gibi bırakır.

Proxus ardından kaç emrin eklendiğini ve değiştiğini söyler. Alamadığı satırlar, satır numarası ve nedeniyle
(bilinmeyen bir cihaz ya da okunamayan bir tarih gibi) listelenir; diğer satırlar içe aktarılır.

Yeniden içe aktarmak sahanın yaptığını geri almaz: iyi ve fire miktarları ile gerçek zamanlar dosyayla hiç değişmez;
dosyadaki durum yalnızca emri bekletir, tamamlar, iptal eder ya da henüz başlamamış bir emri yayınlar.

## İş emirlerini ERP'den gönderme

ERP iş emirlerini Proxus'a kendisi gönderebilir: JSON olarak ya da bir B2MML (ISA-95) ProductionSchedule olarak. Her
emir numarasıyla eklenir ya da planı değişir; kurallar [dosyadan almayla](#dosyadan-alma) aynıdır, sahanın
miktarları ve zamanları hiç değişmez.

1. ERP için iş emri oluşturup değiştirebilen bir rolle bir Proxus kullanıcısı oluşturun (örneğin yalnızca
   **Formlar** erişimi olan, Mühendis rolünün bir kopyası).
2. ERP `POST /api/Authentication/Authenticate` ile ve `{ "userName": "…", "password": "…" }` gövdesiyle oturum açar,
   aldığı token'ı saklar.
3. Emirleri `POST /api/work-orders` ile, `Authorization: Bearer <token>` başlığıyla ve `application/json` ya da
   `application/xml` içerik türüyle gönderir.

JSON bir emir dizisidir ya da diziyi `workOrders` altında tutan bir nesnedir. Adlar dosyanın sütun adlarıdır, büyük
küçük harf fark etmez: `number` (ya da `orderNumber`), `product`, `description`, `quantity` (ya da `plannedQuantity`),
`unit`, `start`, `end`, `device`, `status`.

```json
{ "workOrders": [
  { "orderNumber": "WO-2001", "product": "Braket C3", "plannedQuantity": 500, "unit": "adet",
    "plannedStart": "2026-10-27T08:00:00", "device": "Pres 4", "status": "Released" }
] }
```

Bir B2MML ProductionSchedule'da her **ProductionRequest** bir emirdir: **ID** emir numarası, üretilen malzeme
(MaterialProducedRequirement ya da *Produced* olarak kullanılan MaterialRequirement) ürünü, miktarı ve birimi, istenen
ekipman cihazı, **EarliestStartTime** ve **LatestEndTime** (ya da isteğin StartTime ve EndTime değerleri) planı,
**RequestState** de durumudur. Saat farkı olan zamanlar merkez sunucunun yerel saatine çevrilir; sayılar ve zamanlar
değişmez biçimde yazılır.

Yanıt, eklenen ve değişen emirleri numaralarıyla, reddedilenleri de numarası (ya da sırası) ve
`WORK_ORDER_DEVICE_UNKNOWN` gibi bir kodla listeler:

```json
{ "added": ["WO-2001"], "changed": [], "refused": [{ "where": "WO-2002", "code": "WORK_ORDER_DEVICE_UNKNOWN" }] }
```

İkisi de olmayan bir mesaj `400` ve `WORK_ORDER_MESSAGE_UNREADABLE`, eksik token `401`, iş emri oluşturamayan bir rol
`403` yanıtını alır. Bir mesaj en çok 5.000 emir ve 4 MB taşır.

## İş emirlerini ERP'den çekme

Proxus iş emirlerini ERP'den zamanlanmış olarak da okuyabilir. ERP'nin adresi ve kimlik bilgileri bir
[veri hedefinin](https://proxus.io/tr/docs/connect/outbound-targets) bilgileridir: bir **REST API** hedefi ya da Microsoft SQL Server,
PostgreSQL, MySQL veya Oracle gibi bir sunucu veritabanı.

Bunu **İş emirleri** listesindeki **ERP entegrasyonu** penceresinin **İş emirlerini oku** bölümünde ayarlayın. Pencere
veri hedeflerini yöneten roller içindir.

*Ekran görüntüsü: ERP entegrasyonu penceresi: İş emirlerini oku bölümünde ERP (test) REST bağlantısı ve /schedule.xml yolu, Üretimi bildir bölümünde /performance yoluna B2MML gönderimi açık*

1. **Zamanlanmış çek**, ERP'yi her **Aralık (dakika)** sürede bir okur (1 ile 1440 arası).
2. **ERP bağlantısı**, okumanın yapıldığı veri hedefidir. REST API için adresine **Yol** eklenir, örneğin
   `/production/orders?plant=1`; yanıt [API'ye gönderildiği](#is-emirlerini-erpden-gonderme) gibi JSON ya da B2MML'dir.
   Veritabanında bunun yerine bir **SQL sorgusu** girilir. **Son çekme**, en son ne zaman okunduğunu ve ne yapıldığını
   ya da ERP'nin neden okunamadığını söyler.
3. **ERP'ye bildir**, üretim bildirimlerini gönderir; bkz. [Üretimi ERP'ye bildirme](#uretimi-erpye-bildirme).
4. **Bildirim bağlantısı**, bildirimlerin gittiği veri hedefidir.
5. **Son bildirim**, ERP'nin en son ne zaman bildirim aldığını, kaç bildirimin beklediğini ve ERP'nin sonuncusunu neden
   almadığını söyler.
6. **Şimdi çek** ayarları kaydeder ve ERP'yi hemen okur.

SQL sorgusu, sütunları dosyanın sütunları gibi adlandırılmış tek bir `SELECT`'tir:

```sql
SELECT order_no AS "İş emri no", material AS "Ürün", qty AS "Miktar", uom AS "Birim",
       plan_start AS "Başlangıç", work_center AS "Cihaz", state AS "Durum"
FROM erp.production_orders
WHERE plant = 'IST' AND state IN ('Released', 'Held')
```

Hedefe yalnızca okuyabilen bir veritabanı hesabı verin. Bu yolla okunan emirlerin kaynağı **ERP'den okundu**, API'ye
gönderilenlerinki **API** olur. Birden çok merkez sunucu varsa ERP'yi her seferinde yalnızca biri okur.

## Üretimi ERP'ye bildirme

**ERP'ye bildir** açıkken [bağlı bir formun](#formu-is-emirlerine-baglama) her bildirimi ERP'ye gider: başlatma,
bekletme, bitirme ya da üretilen miktarlar, her biri geçerli sayıldığı anda. Açılmadan önce yapılan bildirimler
gönderilmez.

- Bir **REST API**'ye her bildirim **Bildirim yolu**'na, seçilen **Biçim**'de gönderilir: JSON ya da bir B2MML
  (ISA-95) ProductionPerformance.
- Bir **veritabanına** her bildirim **Bildirim tablosu**'na bir satır olarak yazılır.

JSON bildirim, kaydın bildirdiğini ve emrin ondan sonraki halini taşır:

```json
{
  "id": "01a1740b-6dfe-7aa1-8d5d-464e194cdb49",
  "workOrder": "WO-2001", "product": "Braket C3", "step": "finish",
  "good": 370, "scrap": 5, "unit": "adet", "device": "Pres 4", "reportedBy": "operator",
  "reportedAt": "2026-10-25T17:11:05Z", "status": "Completed",
  "totals": { "planned": 500, "good": 490, "scrap": 10 },
  "actualStart": "2026-10-25T06:02:11Z", "actualEnd": "2026-10-25T17:11:05Z"
}
```

B2MML'de bir **ProductionResponse** emri (**ProductionRequestID**), durumunu (**ResponseState**: Ready, Running, Held,
Completed ya da Aborted) ve gerçek başlangıç ve bitişini verir. İçindeki **SegmentResponse** bildirimin kendisidir:
**ID** olarak adım, makine (**EquipmentActual**), kişi (**PersonnelActual**) ve üretilen ürün
(**MaterialProducedActual**); **Good** ve **Scrap** anahtarlı birer **Quantity** ile.

Bildirim tablosunda şu sütunlar olmalıdır:

```sql
CREATE TABLE dbo.ProductionReport (
  RecordId        varchar(36) PRIMARY KEY,
  WorkOrder       varchar(64) NOT NULL,
  Product         varchar(200),
  Step            varchar(20),
  GoodQuantity    decimal(18, 3),
  ScrapQuantity   decimal(18, 3),
  Unit            varchar(20),
  Device          varchar(200),
  ReportedBy      varchar(200),
  ReportedAt      datetime2 NOT NULL,
  OrderStatus     varchar(20),
  PlannedQuantity decimal(18, 3),
  GoodTotal       decimal(18, 3),
  ScrapTotal      decimal(18, 3),
  ActualStart     datetime2,
  ActualEnd       datetime2
)
```

Zamanlar UTC'dir. Bildirimler yapıldıkları sırayla gider. ERP birini almazsa (ulaşılamıyorsa, hatayla yanıt
veriyorsa ya da satır yazılamıyorsa) 1, 2, 4… en çok 60 dakika sonra yeniden denenir ve sonrakiler onu bekler; böylece
hiçbir şey kaybolmaz ve hiçbir şey sırasız gelmez. ERP nadiren bir bildirimi iki kez alabilir (örneğin merkez sunucu
gönderdikten hemen sonra durduysa): **id** (**RecordId**) aynıdır, ERP ikincisini yok sayabilir; tabloda
**RecordId** üzerindeki birincil anahtar bunu kendiliğinden yapar.

## Formu iş emirlerine bağlama

Bir form, seçeneklerini **İş emirleri** listesinden alan bir seçim alanı olduğunda ve formun ayarlarında bu alana
bağlandığında iş emirlerine bildirim yapar. [Formlar](https://proxus.io/tr/docs/organize/forms) ekranındaki **İş emri** örnek formu
bağlı gelir.

1. Bir **Tek seçim** alanı ekleyin ve seçeneklerini **Ortak liste** olarak **İş emirleri**'nden alın. Alan açık iş
   emirlerini *WO-1001 · Braket A12 · Pres 4* biçiminde sunar.
2. Tasarımcıda hiçbir şey seçili değilken formun ayarlarındaki **İş emri** grubunu açın ve bu alanı **İş emri alanı**
   olarak seçin.
3. **Adım** alanını seçin: kayıt değerleri `start`, `hold` ve `finish` olan seçenekleri olan bir seçim alanı.
4. **İyi miktar** ve **Fire miktarı** için sayı alanlarını seçin.
5. Formu yayınlayın.

İş emri alanı **İş emirleri** listesinden bir seçim değilse, adım bir seçim alanı değilse ya da bir miktar sayı alanı
değilse tasarımcının kontrolleri yayınlamayı durdurur.

## Formlar emri nasıl ilerletir

Bağlı bir formun geçerli sayılan her kaydı (gönderilen; formun kayıtları onay istiyorsa onaylanan) seçtiği emre bir kez
bildirilir:

- İyi ve fire miktarları emrin miktarlarına eklenir.
- **start** emri **Çalışıyor** yapar ve henüz yoksa gerçek başlangıcını yazar.
- **hold** çalışan bir emri **Beklemede** yapar.
- **finish** emri **Tamamlandı** yapar ve gerçek bitişini (henüz yoksa gerçek başlangıcını da) yazar.
- Adımı olmayan ama miktarı olan bir kayıt, yayınlanmış bir emri başlatır.

Bir kayıt, çevrim dışı kalmış bir cihazdan yeniden gönderilse bile asla iki kez sayılmaz. Tamamlanan ya da iptal edilen
bir emre kayıtlar miktarlarını eklemeye devam eder, ama durumunu artık değiştirmez.

## Kimler kullanabilir

İş emirleri, rollerin **Formlar** alanının parçasıdır. Hazır Mühendis rolünün tam erişimi vardır. İş emri
oluşturabilen bir rol **Dosyadan al** düğmesini de görür.
