Feature: Shipping Carrier Additions, Creating a voucher without an order, verifying order details before creating voucher, ELTA Courier voucher print updates
This commit is contained in:
+709
@@ -0,0 +1,709 @@
|
||||
# ELTA Courier — API and printing reference
|
||||
|
||||
A reference for designing the ELTA Courier integration, reconstructed from ELTA's own
|
||||
desktop client ("ELTA Customer Client", `ELTA_PEL.exe`, client version `0032`), decompiled
|
||||
from ELTA's official installer (`https://www.elta-courier.gr/app/ELTA_COURIER_SETUP.msi`).
|
||||
The decompiled source lives next to this repo in `../elta-courier-decompiled/` (see its
|
||||
README); file and line references below point there. Where something was confirmed by
|
||||
calling ELTA's test account from our integration, it says so.
|
||||
|
||||
Two axes:
|
||||
|
||||
- **Part A — the API**: every SOAP operation, its inputs and outputs, the values the
|
||||
client sends, and the business rules it enforces before calling.
|
||||
- **Part B — printing**: what the client prints, when, from which data, with every
|
||||
fixed text, every image and every formatting rule.
|
||||
|
||||
Part C lists where our current integration (`src/Shipping/Carriers/Elta/`) differs.
|
||||
|
||||
---
|
||||
|
||||
# Part A — The API
|
||||
|
||||
## A1. Transport
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Host | **`https://clients.elta-courier.gr`** (port 443). Verified 2026-09-30: the hostname now resolves to `18.156.16.255` (AWS Frankfurt) and serves HTTPS with a valid certificate; answers are identical to the old host. |
|
||||
| Old host | `212.205.47.226:9003` (the installer's `hosts-entry.txt`) — **plain HTTP only**: HTTPS there fails the TLS handshake (`SSL_ERROR_SYSCALL`), and `https://clients.elta-courier.gr:9003` fails with `wrong version number` (that port speaks HTTP). |
|
||||
| Scheme | The client builds its URL as `"https://" + <first field of ip.txt>` (`Form1.cs:213`), i.e. HTTPS on the hostname. |
|
||||
| Reliability | The HTTPS host was slower (~0.4–0.8 s vs ~0.2 s) and returned one transient HTTP 500 and one 15 s timeout during testing; retry on network errors / 5xx. |
|
||||
| Protocol | SOAP 1.1, document/literal. One endpoint URL for every operation. |
|
||||
| Namespace | Each operation has its own: `/<OPERATION>` (e.g. `/PELVGNEW`). |
|
||||
| Body | `<READ>` element in that namespace, with each parameter as a child element. |
|
||||
| SOAPAction | We send `Get` (works); the proxies' `SoapDocumentMethod` arguments weren't decodable. |
|
||||
| Authentication | None at the HTTP/SOAP level. Account codes travel as ordinary body parameters. `PELLOGINNEW` checks the password; other operations take the account/user code without a password. |
|
||||
| Proxy | Optional corporate HTTP proxy from `proxy.txt` (`ip;port;user;pass`), with `Expect100Continue = false`. Local-network only; nothing to do with ELTA auth. |
|
||||
| WSDL | None published for these operations; the shapes come from the client's generated proxies (`ELTA_PEL.pel_*/`). |
|
||||
|
||||
**Every response** carries:
|
||||
|
||||
- `st_flag` — the return value of `READ` (declared `integer`). **`"0"` = success**; anything
|
||||
else is an error.
|
||||
- `st_title` — the message (Greek) to show on error, e.g. `Λάθος Τ.Κ.` (wrong postcode),
|
||||
`Λάθος ΣΥΔΕΤΑ` (wrong voucher), `Δεν Επιτρέπεται! Εχει Γίνει Εκτύπωση` (not allowed,
|
||||
already printed).
|
||||
|
||||
**Paging convention** (every list operation): a page is at most **100 rows**. If a page
|
||||
comes back with exactly 100 rows, call again passing the last row's id as the cursor
|
||||
(`in_id`, `pel_sub_code` or `a_paral_code`, depending on the operation); the client stops
|
||||
when a page has fewer than 100 (or the 100th row is empty).
|
||||
|
||||
**Number formats**: amounts come back right-aligned in 9 characters (`" 0.00"`);
|
||||
dates go in as `dd/MM/yyyy`; timestamps come back as `yyyyMMddHHmm[ss]` in Greek local time.
|
||||
|
||||
## A2. Operations at a glance
|
||||
|
||||
| Operation | Purpose | Client screen |
|
||||
|---|---|---|
|
||||
| `PELLOGINNEW` | Log in, get account details and the user's station | Login |
|
||||
| `PELVERNEW` | Latest client version (triggers FTP self-update) | Login |
|
||||
| `PELLISTNEW` | Sub-senders of a multi-sender account | Login |
|
||||
| `PELSRV` | Service catalogue | Login |
|
||||
| `PELSUR` | Surcharge catalogue | **Never called** (surcharges are hardcoded) |
|
||||
| `PELPARALLIST1` | Saved recipients (address book) | Login |
|
||||
| `PELTKNEW` | Postcode → station, default service, localities | Voucher entry |
|
||||
| `PELTK` | Postcode → station, service (older/simpler) | Voucher entry, recipient pick |
|
||||
| `PELTKBOX` | Postcode → PostBox station and service | Voucher entry (PostBox) |
|
||||
| `PELTK1` | Is this postcode valid? | File/Excel import |
|
||||
| `PELVGNEW` | **Create a voucher** (pending or issued) | Voucher entry |
|
||||
| `PELVGUP` | Edit a pending voucher | Voucher entry (edit mode) |
|
||||
| `PELVGINNEW` | Create a pending voucher, simplified (bulk) | File/Excel import |
|
||||
| `PELVG01NEW1` | **Issue** a pending voucher (and re-print an issued one) | Batch processing |
|
||||
| `PELVGDEL` | Delete a pending voucher | Batch processing |
|
||||
| `PELPARALVGNEW1` | List pending (and optionally issued) vouchers | Batch processing |
|
||||
| `PELTTNEW01` | Track one voucher (by voucher number **or reference**) | Tracking |
|
||||
| `PELMANIF2` | Vouchers in a date range with latest status, by status | Multiple search |
|
||||
| `PELMANIFNEW` | Index / manifest of vouchers in a date range, with totals | Index report |
|
||||
| `PELPARALIN` / `PELPARALUP` / `PELPARALSE` | Address book: insert / update / fetch one | Recipients |
|
||||
| `PELPARALDE` / `PELPARALDE1` | Address book: delete one / delete a code range | Recipients |
|
||||
| `PELPARALCE` | Address book: check a code and postcode before import | Recipient Excel import |
|
||||
|
||||
## A3. Account and reference data
|
||||
|
||||
### `PELLOGINNEW` — log in
|
||||
|
||||
| In | |
|
||||
|---|---|
|
||||
| `pel_code` | Customer (account) code, e.g. test account `999999999` |
|
||||
| `user_code` | User code (digits only in the client) |
|
||||
| `user_pass` | Password |
|
||||
|
||||
| Out | |
|
||||
|---|---|
|
||||
| `st_title` | Error message |
|
||||
| `pel_flag` | `"1"` = multi-sender account (has sub-senders, see `PELLISTNEW`); `"0"` = single sender |
|
||||
| `pel_titles`, `pel_addres`, `pel_area`, `pel_tk`, `pel_tel_1`, `pel_tel_2` | Account name/address/area/postcode/phones — printed as the **sender** on single-sender accounts |
|
||||
| `user_station` | The user's ELTA station code — sent as `sender_station` to the postcode lookups and to `PELVG01NEW1`, and printed as the deposit station (`Γρ.Κατάθεσης`) |
|
||||
| `user_pel_code` | The account code to use in every later call (`pel_code` / `pel_apost_code`) |
|
||||
|
||||
After a successful login the client calls `PELVERNEW` (if an FTP address is configured);
|
||||
if `ag_wupdate_version` > its own version (`0032`) it downloads an update over FTP and
|
||||
stops. Then it loads the reference lists below.
|
||||
|
||||
### `PELVERNEW` — client version
|
||||
No inputs. Out: `st_title`, `ag_wupdate_version`.
|
||||
|
||||
### `PELLISTNEW` — sub-senders (multi-sender accounts only)
|
||||
In: `pel_code` (= `user_pel_code`), `pel_sub_code` (cursor: last code of the previous page,
|
||||
`""` first). Out: `st_title`, `ag_rec_rec[]` (100/page), `ag_rec_counter`.
|
||||
Row: `ag_code`, `ag_title`, `ag_adress`, `ag_area`, `ag_tk`, `ag_tel_1`, `ag_tel_2`,
|
||||
`ag_st` (station), `ag_st_t` (station title).
|
||||
Used to pick the **sender** of a voucher and the **return-to** party (see special handling).
|
||||
|
||||
### `PELSRV` — service catalogue
|
||||
No inputs. Out: `st_title`, `ag_srv_rec[]` (up to 150: `ag_code`, `ag_title`), `ag_srv_counter`.
|
||||
The service picker only offers services whose code starts with the **same two digits** as
|
||||
the one the postcode lookup returned (same family).
|
||||
|
||||
### `PELSUR` — surcharge catalogue
|
||||
No inputs. Out: `ag_sur_rec[]` (`ag_code`, `ag_title`). **The client never calls it**; its
|
||||
surcharges are hardcoded (see A5).
|
||||
|
||||
### `PELPARALLIST1` — saved recipients
|
||||
In: `pel_code`, `a_paral_code` (cursor). Out: `ag_rec_rec[]` (100/page: `ag_code`,
|
||||
`ag_title`, `ag_adress`, `ag_area`, `ag_tk`, `ag_tel_1`, `ag_tel_2`), `ag_rec_counter`.
|
||||
|
||||
## A4. Postcode, station and service lookups
|
||||
|
||||
### `PELTKNEW` — the main lookup
|
||||
In: `pel_tk` (postcode), `sender_station` (= `user_station`).
|
||||
|
||||
| Out | |
|
||||
|---|---|
|
||||
| `pel_fields.rec_station`, `rec_station_t` | Destination station code and title (`Γρ. Επίδοσης`) |
|
||||
| `pel_fields.pel_service`, `pel_service_t` | Default service for that postcode |
|
||||
| `pel_fields.pel_service_t201`, `pel_service_t231` | Titles of services 201 and 231 (see localities) |
|
||||
| `a_lview_data[]` | Up to 300 **localities** within the postcode |
|
||||
| `locations_counter` | Number of localities; `"0"` = none, use `pel_service` as is |
|
||||
|
||||
Locality row: `wloc_code`, `wloc_title`, `wloc_county`, `wloc_countyt`, `wloc_station`,
|
||||
`wloc_stationt`, `wloc_distance` (decimal), `wloc_postal_code`, `wloc_coordinate_x`,
|
||||
`wloc_coordinate_y`, `wloc_disp_flag`, `wloc_comments`.
|
||||
|
||||
**When a postcode has localities**, the user must pick one (`Sydeta.cs:3320`):
|
||||
|
||||
- the recipient **area** becomes `"<wloc_code>/<wloc_title>"`;
|
||||
- `wloc_disp_flag = "1"` (hard to reach, `ΔΥΣΠΡΟΣΙΤΟ`) → service **`231`**
|
||||
`ΠΟΛΗ ΠΟΛΗ -ΠΠ- ΔΥΣΠΡΟΣΙΤΟ`; otherwise service **`201`** `ΕΝΤΟΣ ΠΟΛΗΣ -ΠΠ- ΕΠΟΜΕΝΗ`.
|
||||
|
||||
### `PELTK` — simple lookup
|
||||
In: `pel_tk`, `sender_station`. Out: `st_title`, `rec_station`, `rec_station_t`,
|
||||
`pel_service`, `pel_service_t`. Used when a saved recipient is picked.
|
||||
|
||||
### `PELTKBOX` — PostBox lookup
|
||||
In: `pel_tk`, `sender_station`. Out: `st_title`, `pel_fields` (`rec_station`,
|
||||
`rec_station_t`, `pel_service`, `pel_service_t`). Used instead of `PELTKNEW` when
|
||||
"ΕΠΙΔΟΣΗ POST BOX" is ticked; on error the PostBox option is unticked.
|
||||
|
||||
### `PELTK1` — validate a postcode
|
||||
In: `pel_tk`. Out: `st_title` (`st_flag` ≠ 0 = invalid). Used by the bulk imports.
|
||||
|
||||
## A5. Vouchers (ΣΥ.ΔΕ.ΤΑ.)
|
||||
|
||||
### Lifecycle
|
||||
|
||||
```
|
||||
PELVGNEW (pel_insert_flag "0") ─► pending: has pel_vg_id, no voucher number
|
||||
│ │ editable (PELVGUP), deletable (PELVGDEL)
|
||||
│ ▼
|
||||
│ PELVG01NEW1 (issue) ─► issued: voucher number, OCR line,
|
||||
│ stations, service; child numbers
|
||||
└── (pel_insert_flag "1") ─► issued immediately, same outputs as PELVGNEW
|
||||
```
|
||||
|
||||
- **Only pending vouchers can be deleted.** An issued one is refused (`Δεν Επιτρέπεται!
|
||||
Εχει Γίνει Εκτύπωση`). Confirmed on the test account.
|
||||
- In the client, **issuing = printing**: "Print" in batch processing calls `PELVG01NEW1`
|
||||
and prints the result. It calls `PELVG01NEW1` for already-issued rows too, so it also
|
||||
serves to **re-print** (ELTA returns the existing voucher's data).
|
||||
- A **multi-parcel** send is **one** voucher record (`pel_temaxia` > 1). The extra parcels
|
||||
get their own numbers (`vg_child_no[]`) only when the voucher is issued. They are not
|
||||
separately listed, deletable or trackable (tracking an extra parcel's number returns
|
||||
`Λάθος ΣΥΔΕΤΑ` — confirmed).
|
||||
|
||||
### `PELVGNEW` — create a voucher
|
||||
|
||||
The client's call (`Sydeta.cs:1550`), in order:
|
||||
|
||||
| # | Parameter | Client value | Notes / rules |
|
||||
|---|---|---|---|
|
||||
| 1 | `pel_apost_code` | Sender code: `user_pel_code` (single-sender), or the chosen sub-sender | Required |
|
||||
| 2 | `pel_paral_name` | Recipient name | Required; up to 150 chars in the form |
|
||||
| 3 | `pel_paral_address` | Recipient address | Required; up to 150 |
|
||||
| 4 | `pel_paral_area` | Recipient area (or `"<wloc_code>/<wloc_title>"`) | Up to 40 |
|
||||
| 5 | `pel_paral_tk` | Postcode | Required; 5 digits |
|
||||
| 6 | `pel_paral_thl_1` | Phone | Digits only, up to 10. **At least one of the two phones is required** |
|
||||
| 7 | `pel_paral_thl_2` | Mobile | Up to 10. PostBox: required, 10 digits, starting `69` |
|
||||
| 8 | `pel_service` | Service code from the postcode lookup / picker | **Required** by the client (`Δεν Εχει Οριστεί Υπηρεσία`). We send `""` and ELTA assigns one on issue — works on the test account |
|
||||
| 9 | `pel_baros` | Weight in kg, `.` decimal | **Required, > 0** |
|
||||
| 10 | `pel_baros_xyz` | Volumetric weight: **X × Y × Z (cm) ÷ 5000**, 3 decimals | Only when dimensions are given |
|
||||
| 11–13 | `pel_x`, `pel_y`, `pel_z` | Dimensions in cm, integers up to 3 digits | All three > 0 or none (`Λάθος Διαστάσεις`) |
|
||||
| 14 | `pel_temaxia` | Number of pieces | **Required, 1–20** (`Μέγιστος Επιτρεπόμενος Αριθμός Τεμαχίων 20.`) |
|
||||
| 15 | `pel_paral_sxolia` | Remarks **+ envelope/parcel flag**, see below | Remarks up to **90** chars |
|
||||
| 16 | `pel_sur_1` | `002` special handling, or `917` PostBox | Fixed slot, see below |
|
||||
| 17 | `pel_sur_2` | `003` set delivery time | Fixed slot |
|
||||
| 18 | `pel_sur_3` | `004` Saturday delivery | Fixed slot |
|
||||
| 19 | `pel_ant_poso` | **COD cash** amount | `.` decimal |
|
||||
| 20–23 | `pel_ant_poso1`…`4` | COD **cheque** amounts (up to 4 cheques) | |
|
||||
| 24–27 | `pel_ant_date1`…`4` | Each cheque's due date, `dd/MM/yyyy` | Required per cheque; **not in the past** |
|
||||
| 28 | `pel_asf_poso` | Insured value | **The client always sends a single space `" "`** — it has no insurance input |
|
||||
| 29 | `pel_user` | `user_code` | |
|
||||
| 30 | `pel_ref_no` | "Reference No" | Up to 30 chars; printed on the voucher, searchable, trackable |
|
||||
| 31 | `pel_insert_flag` | `"1"` = issue now ("Εκτύπωση ΣΥ.ΔΕ.ΤΑ." ticked), `"0"` = pending | We send `"0"` |
|
||||
| 32 | `pel_paral_code` | Saved recipient's code, if picked from the address book | |
|
||||
| 33 | `pel_retur_code` | Return-to party's code (special handling only) | See below |
|
||||
|
||||
**Envelope or parcel (mandatory).** The client makes the user choose `Φάκελος` (envelope)
|
||||
or `Δέμα` (parcel) (`Δεν Εχει Επιλεγεί Είδος`), and encodes it **inside
|
||||
`pel_paral_sxolia`**: the remarks right-aligned in 99 characters, then `"1"` (envelope) or
|
||||
`"2"` (parcel) — 100 characters total (`Sydeta.cs:1530`):
|
||||
|
||||
```csharp
|
||||
pel_paral_sxolia = $"{remarks.Trim(),99}" + "2"; // parcel
|
||||
```
|
||||
|
||||
(Only `PELVGNEW` does this; `PELVGUP` and `PELVGINNEW` send the remarks plain.)
|
||||
|
||||
**Surcharges go in fixed slots**, not in order: special handling is always `pel_sur_1`, set
|
||||
time always `pel_sur_2`, Saturday always `pel_sur_3`; PostBox (`917`) takes `pel_sur_1`.
|
||||
The client's surcharges:
|
||||
|
||||
| Code | Surcharge | Slot |
|
||||
|---|---|---|
|
||||
| `002` | ΕΙΔΙΚΗ ΔΙΑΧΕΙΡΙΣΗ (special handling) | `pel_sur_1` |
|
||||
| `003` | ΠΡΟΚΑΘΟΡΙΣΜΕΝΗ ΩΡΑ (set delivery time) | `pel_sur_2` |
|
||||
| `004` | ΕΠΙΔΟΣΗ ΣΑΒΒΑΤΟΥ (Saturday delivery) | `pel_sur_3` |
|
||||
| `917` | ΕΠΙΔΟΣΗ POST BOX (PostBox delivery) | `pel_sur_1` |
|
||||
|
||||
**Special handling (`002`) and the return-to party.** Ticking special handling sets a
|
||||
return-to party (`pel_retur_code`), defaulting to the sender; multi-sender accounts can
|
||||
pick another sub-sender. When ELTA then returns a **return voucher** (`return_vg`), the
|
||||
client prints it (B6).
|
||||
|
||||
**Business rules the client enforces** (all before calling ELTA):
|
||||
|
||||
- name, address, postcode, service required; at least one phone; pieces 1–20; weight > 0;
|
||||
- COD is **cash or cheques, never both** (`Δεν Επιτρέπεται Αντικαταβολή Μετρητά Και Επιταγή`);
|
||||
- each cheque needs a due date, not in the past;
|
||||
- **PostBox**: not with special handling (`Δεν Επιτρέπεται Post Box Με ειδική Διαχείρηση`),
|
||||
not with COD (`Δεν Επιτρέπεται Post Box Με Αντικαταβολή`), and needs a 10-digit mobile
|
||||
starting `69` (`Δεν Επιτρέπεται Post Box Χωρίς Κινητό Τηλέφωνο` / `...Λάθος Κινητό Τηλέφωνο`);
|
||||
- envelope or parcel must be chosen.
|
||||
|
||||
**Outputs** (same set from `PELVG01NEW1`, plus stations/service there):
|
||||
|
||||
| Out | |
|
||||
|---|---|
|
||||
| `vg_code` | The voucher number, e.g. `NZ000987368GR` (empty when pending) |
|
||||
| `vg_child_no[]` | One number per extra parcel of a multi-parcel send (up to 149) |
|
||||
| `ocr_line` | OCR line, e.g. `>14260009873682< 17004> 1317759< 25>` — printed at the foot of the A4 payment stub; characters 2–14 are the 13-digit reference printed on the voucher |
|
||||
| `return_vg`, `r_ocr_line` | Return voucher number and its OCR line (special handling) |
|
||||
| `epitagh_vg`, `e_ocr_line` | Cheque-return voucher number and its OCR line (COD by cheque) |
|
||||
| `date_time` | Issue time, `yyyyMMddHHmm` (Greek time). The client picks the report by it (≥ `202410` → current reports) |
|
||||
|
||||
`PELVGNEW` does **not** return the pending voucher's id (`pel_vg_id`); find it with
|
||||
`PELPARALVGNEW1` (match `pel_ref_no`, empty `pel_paral_vg`, highest id).
|
||||
|
||||
### `PELVG01NEW1` — issue (and re-print)
|
||||
In: `pel_id` (= `pel_vg_id`, declared `integer`), `sender_station` (= `user_station`).
|
||||
Out: `st_title`, `return_vg`, `epitagh_vg`, `vg_code`, `vg_child_no[]`, `ocr_line`,
|
||||
`r_ocr_line`, `e_ocr_line`, `date_time`, `rec_station`, `rec_station_t` (destination
|
||||
station), `rec_srv`, `rec_srv_t` (the service ELTA settled on, e.g. `201` `ΠΟΛΗ ΠΟΛΗ - ΠΠ`).
|
||||
|
||||
### `PELVGUP` — edit a pending voucher
|
||||
In: `pel_id`, then the same fields as `PELVGNEW` 1–30 and `pel_paral_code` (no
|
||||
`pel_insert_flag`, no `pel_retur_code`; remarks sent plain). Out: `st_title`.
|
||||
|
||||
### `PELVGINNEW` — bulk insert (pending)
|
||||
Used by the file/Excel imports. In: `pel_code` (sender), `user_code`, `paral_title`,
|
||||
`paral_adress`, `paral_area`, `paral_tk`, `paral_thl1`, `paral_thl2`, `paral_tem`
|
||||
(pieces), `paral_baros`, `paral_sxolia`, `paral_ant_m` (COD cash), `paral_ant_e` (COD
|
||||
cheque), `paral_ant_date` (cheque due date), `paral_da` (always `""`), `paral_ref`,
|
||||
`paral_sur_1`…`3`, `retour_code`. Out: `st_title`. No service, no envelope/parcel flag,
|
||||
no dimensions — ELTA works them out.
|
||||
|
||||
### `PELVGDEL` — delete a pending voucher
|
||||
In: `pel_vg_id` (the pending id, not the voucher number). Out: `st_title`. The client
|
||||
only offers it for rows without a voucher number.
|
||||
|
||||
### `PELPARALVGNEW1` — list pending vouchers
|
||||
In: `pel_code`, `pel_user_code`, `flag_1` (`"1"` = "Εμφάνιση Όλων": include issued ones),
|
||||
`flag_2` (`"1"` = "Όλοι Οι Χρήστες": all the account's users), `in_id` (cursor: last
|
||||
`pel_vg_id`, `"0"` first). Out: `st_title`, `vg_rec[]` (100/page), `vg_rec_counter`.
|
||||
|
||||
Row fields: `pel_vg_id`, `pel_apost_code`, `pel_paral_vg` (voucher number; empty =
|
||||
pending), `pel_paral_code`, `pel_paral_name`, `pel_paral_address`, `pel_paral_area`,
|
||||
`pel_paral_tk`, `pel_paral_thl_1`, `pel_paral_thl_2`, `pel_service`, `pel_baros`,
|
||||
`pel_baros_xyz`, `pel_x`, `pel_y`, `pel_z`, `pel_temaxia`, `pel_paral_sxolia`,
|
||||
`pel_ant_poso`, `pel_ant_poso1`…`4`, `pel_ant_date1`…`4`, `pel_asf_poso`, `pel_ref_no`,
|
||||
`pel_sur_1`…`3`, `pel_retour`.
|
||||
|
||||
## A6. Tracking and search
|
||||
|
||||
### `PELTTNEW01` — track one voucher
|
||||
In: `web_vg` — **a voucher number or our reference number** (the client's field is labelled
|
||||
`ΣΥ.Δ.ΕΛ.ΤΑ./Reference No`), `pel_code`.
|
||||
|
||||
Out: `st_title`, `web_status[]` (up to 50 checkpoints), `web_status_counter`, `pel_rec`.
|
||||
|
||||
Checkpoint: `web_date_time` (`yyyyMMddHHmmss`, Greek time), `web_station`,
|
||||
`web_status_name` (e.g. `ΔΗΜΙΟΥΡΓΙΑ ΣΥ.ΔΕ.ΤΑ. ΑΠΟ ΠΕΛΑΤΗ`, in unaccented capitals),
|
||||
`web_sxolia` (e.g. `PEL CLIENT`). Empty rows pad the array; skip rows without a date.
|
||||
|
||||
`pel_rec` (the voucher record):
|
||||
|
||||
| Field | Meaning |
|
||||
|---|---|
|
||||
| `a_vg_3` | The voucher number |
|
||||
| `a_vg_2` | Its **return** voucher — verified: a special-handling voucher's `return_vg` came back here |
|
||||
| `a_vg_1` | Its **cheque** voucher (by elimination; the client's field labels suggested the opposite) |
|
||||
| `a_ref` | Our reference |
|
||||
| `a_rec_title`, `a_rec_address`, `a_rec_area`, `a_rec_postal`, `a_rec_tel_1`, `a_rec_tel_2` | Recipient |
|
||||
| `a_rec_station`, `a_rec_station_t` | Destination station |
|
||||
| `a_services` | Service (code/text) |
|
||||
| `a_weight` (decimal), `a_no_of_packages` | Weight, pieces |
|
||||
| `a_antik` (decimal), `a_antik_text` | COD amount and text |
|
||||
| `a_antik1` (decimal), `a_antik_text1` | **Remittance** ("Απόδοση") — the COD paid back to the merchant |
|
||||
| `a_sender_date` | Date sent |
|
||||
| `a_rec_name` | **Delivered to** — the name of whoever received it |
|
||||
| `a_rec_date_time` | **Delivered at** — blank until delivered |
|
||||
| `a_apost`, `a_sxolia` | Sender, remarks |
|
||||
|
||||
### `PELMANIF2` — vouchers in a date range, by status ("Πολλαπλή Αναζήτηση")
|
||||
In: `pel_code`, `date_1`, `date_2` (`dd/MM/yyyy`), `paral_code` (optional recipient),
|
||||
`status_flag`, `in_id` (cursor: last `pel_col_id`).
|
||||
|
||||
| `status_flag` | |
|
||||
|---|---|
|
||||
| `0` | All (`Ολα`) |
|
||||
| `1` | Delivered (`Παραδομένα`) |
|
||||
| `2` | Undelivered (`Απαραδοτα`) |
|
||||
| `3` | To be returned (`Προς Επιστροφή`) |
|
||||
|
||||
Row: `pel_col_1` voucher · `pel_col_2` reference · `pel_col_3` recipient · `pel_col_4`
|
||||
postcode · `pel_col_5` station · `pel_col_6` last status · `pel_col_7` remarks/date ·
|
||||
`pel_col_8` COD · `pel_col_id` cursor. Only main vouchers are listed.
|
||||
|
||||
### `PELMANIFNEW` — index / manifest ("Ευρετήριο")
|
||||
In: `pel_code`, `date_1`, `date_2`, `paral_code`, `in_id` (cursor: last `pel_col_15`).
|
||||
Out: `ag_pel_rec[]`, `ag_pel_counter`, **`spel_baros`** (total weight of the page, decimal),
|
||||
**`spel_temaxia`** (total pieces of the page).
|
||||
|
||||
Row: `pel_col_1` voucher · `2` weight · `3` pieces · `4` recipient · `5` address ·
|
||||
`6` postcode · `7` station · `8` sender · `9` reference · `10` COD · `11` **cheque
|
||||
voucher** · `12` **return voucher** · `13` + `14` the two phones · `15` cursor.
|
||||
|
||||
## A7. Address book
|
||||
|
||||
| Operation | In | Out |
|
||||
|---|---|---|
|
||||
| `PELPARALIN` | `pel_code`, `paral_code`, `paral_title`, `paral_adress`, `paral_area`, `paral_tk`, `paral_thl1`, `paral_thl2` | `st_title` |
|
||||
| `PELPARALUP` | same as `PELPARALIN` | `st_title` |
|
||||
| `PELPARALSE` | `pel_code`, `paral_code` | the recipient's fields |
|
||||
| `PELPARALDE` | `pel_code`, `paral_code` | `st_title` |
|
||||
| `PELPARALDE1` | `pel_code`, `paral_code_1`, `paral_code_2` (a code range) | `st_title` |
|
||||
| `PELPARALCE` | `pel_code`, `paral_code`, `paral_tk`, `tk_flag`, `pel_flag` | `st_tk` (`"1"` = bad postcode), `st_code` (`"1"` = code already exists) |
|
||||
|
||||
## A8. Client-side configuration files (for reference)
|
||||
|
||||
| File | Content |
|
||||
|---|---|
|
||||
| `ip.txt` | `<host:port>;<ftp host>` — web-service host (prefixed with `https://`) and update FTP host |
|
||||
| `proxy.txt` | `ip;port;user;pass` |
|
||||
| `printer.txt` | `print_on_create(0/1);printer name;paper size` — `1` = A4, `2` = label (A6) |
|
||||
| `paral.txt`, `awb.txt` | Excel column letters for the recipient (7) and voucher (16) imports |
|
||||
|
||||
## A9. Excel import (voucher columns)
|
||||
|
||||
Recipient name, address, area, postcode, phone, mobile, pieces, weight, remarks, COD cash,
|
||||
COD cheque, cheque due date, reference, surcharge 1–3 — each mapped to a column letter
|
||||
(defaults `A`…`P`). Rows are validated (postcode via `PELTK1`, PostBox via `PELTKBOX`,
|
||||
pieces ≤ 20, …), invalid ones shown red and skipped; valid ones go through `PELVGINNEW`
|
||||
as pending vouchers, issued later from batch processing.
|
||||
|
||||
---
|
||||
|
||||
# Part B — Printing
|
||||
|
||||
## B1. When the client prints
|
||||
|
||||
- **On creation**, if "Εκτύπωση ΣΥ.ΔΕ.ΤΑ." is ticked (default from `printer.txt`): it sends
|
||||
`pel_insert_flag = "1"` and prints straight away.
|
||||
- **From batch processing** ("Εκτύπωση Επιλεγμένων" / "Εκτύπωση Όλων"): issues each voucher
|
||||
with `PELVG01NEW1` and prints it.
|
||||
|
||||
Each print job prints, in order (`Sydeta.cs:1646`, `epexergasia.cs`):
|
||||
|
||||
1. the **main voucher** (`print_vg`);
|
||||
2. one label per **extra parcel**, `002/00n`, `003/00n`, … (`print_child`) — printing the
|
||||
main voucher always prints every parcel; there is no way to print one extra parcel alone;
|
||||
3. the **return voucher**, if ELTA returned `return_vg` (B6);
|
||||
4. the **cheque-return voucher**, if ELTA returned `epitagh_vg` (B7).
|
||||
|
||||
## B2. Paper and report selection
|
||||
|
||||
| Paper (`printer.txt`) | Page (render DeviceInfo) | Main voucher | Extra parcel |
|
||||
|---|---|---|---|
|
||||
| `1` A4 | 21 × 29.7 cm, no margins | `sydetaE.rdlc` | `sydetaE1.rdlc` (separate, smaller report) |
|
||||
| `2` label | **10.4 × 14.8 cm** (not ISO A6's 10.5), no margins | `SydetaLabelE.rdlc` | `SydetaLabelE.rdlc` (same report) |
|
||||
|
||||
Vouchers issued before October 2024 (`date_time` < `202410`) use the older reports
|
||||
(`sydeta`, `sydeta1`, `SydetaLabel1`). `sydeta_R`, `sydeta1_R`, `SydetaLabel2` are only
|
||||
on-screen previews. Rendering is EMF at the page size, drawn to the whole page, sent to the
|
||||
configured printer without a dialog (a print dialog only if no printer is configured).
|
||||
|
||||
## B3. The print data — every field
|
||||
|
||||
The reports read one dataset row (`DataSet1.print_fields`). How the client fills it for a
|
||||
**main voucher** (`Sydeta.cs::print_vg`, `epexergasia.cs::print_vg`):
|
||||
|
||||
**Sender (`sender_1`…`5`)**
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| `sender_1` | `"Κωδικός:" + sender code` |
|
||||
| `sender_2`, `sender_3` | Sender name, split at 40 characters (`sender_3` = the next 40, else `""`) |
|
||||
| `sender_4` | Sender address (first 40 characters) |
|
||||
| `sender_5` | `"TK:" + postcode + " " + area + " ΤΗΛ:" + phone`, cut at 40 |
|
||||
|
||||
Sender = the account (single-sender) or the chosen sub-sender.
|
||||
|
||||
**Recipient (`rec_1`…`5`)**
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| `rec_1`, `rec_2` | Recipient name, split at 40 (`rec_2` = the rest, else `""`) |
|
||||
| `rec_3` | Address (first 40) |
|
||||
| `rec_4` | `"TK:" + postcode + " " + area` |
|
||||
| `rec_5` | `"ΤΗΛ: " + phone + " " + mobile` |
|
||||
|
||||
**Voucher and routing**
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| `sydeta` | Voucher number, e.g. `NZ000987368GR` |
|
||||
| `barcode` | `"*" + voucher + "*"` — printed in a **Code 39 barcode font** (the asterisks are Code 39 start/stop) |
|
||||
| `barcode_2` | `ocr_line` characters 2–14 (13 digits), e.g. `1426000987368` |
|
||||
| `date` | A4: `dd/MM/yyyy HH:mm`; label: `dd/MM/yyyy` |
|
||||
| `time` | Label only: `HH:mm` |
|
||||
| `service`, `service_title` | Service code and title, e.g. `201` / `ΠΟΛΗ ΠΟΛΗ - ΠΠ` |
|
||||
| `station_apo` | Deposit station = the user's station (`Γρ.Κατάθεσης`) |
|
||||
| `station_pros`, `station_pros_title` | Destination station (`Γρ. Επίδοσης`), e.g. `94580` / `ΙΩΑΝΝΙΝΑ - ΠΡΑΚΤΟΡΕΙΟ` |
|
||||
| `xreosi` | `ΧΡΕΩΣΗ ΑΠΟΣΤΟΛΕΑ ΠΙΣΤΩΣΗ` (charged to sender, on credit) |
|
||||
| `siimvasi` | `131775-9` (fixed; the ELTA "Ταχυπληρωμή" account number) |
|
||||
| `copy` | Empty on a main voucher (see extra parcels / return voucher) |
|
||||
|
||||
**Parcel**
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| `baros` | Weight as entered |
|
||||
| `ogos_baros` | Volumetric weight (A4) |
|
||||
| `ogos_1` | `"XxYxZ"` (A4) |
|
||||
| `ogos_2` | `"XxYxZ = <volumetric>"` (label) |
|
||||
| `ogos_3` | `* ΠΡΟΣΟΧΗ PostBox *` for PostBox, else empty |
|
||||
| `temaxia` | 1 piece: the count as entered (`1`); several: `"001/" + count` (e.g. `001/003`) |
|
||||
| `polaplo` | `* ΠΟΛΛΑΠΛΗ ΑΠΟΣΤΟΛΗ *` when more than one piece |
|
||||
| `periexomeno` | The Reference No (`pel_ref_no`) — printed in the REFERENCE box |
|
||||
| `sxolia_1`…`3` | Remarks in **27-character** lines (1st 27, next 27, the rest) — the plain remarks, not the padded/flagged value |
|
||||
|
||||
**Cash on delivery** (`num6` = cash + all cheques)
|
||||
|
||||
| Field | When | Value |
|
||||
|---|---|---|
|
||||
| `antik_minima` | COD | `* ΠΡΟΣΟΧΗ ΑΝΤΙΚΑΤΑΒΟΛΗ *` |
|
||||
| `apodiksi` | COD | `* Απόδειξη Είσπραξης *` (the entry screen misspells it `Είσπαξης`; batch printing spells it right) |
|
||||
| `antik_1` | COD | `ΑΝΤΙΚΑΤΑΒΟΛΗ <total, 2 decimals>`; PostBox: `* ΠΡΟΣΟΧΗ PostBox *` |
|
||||
| `antik_2` | COD | `* ΑΝΑΛΥΣΗ *` |
|
||||
| `antik_3` | cash | `<cash> MΕΤΡΗΤΑ` (the "M" is a Latin M) |
|
||||
| `antik_3`…`6` | cheques, A4 | `<amount> € ΕΠΙΤΑΓΗ <due date>` per cheque |
|
||||
| `antik_3`…`6` | cheques, label | `<amount> ΕΠ/ΓΗ <due date>` per cheque |
|
||||
| `antik_poso` | always | the total if paid in cash, else `0.00` (cheques and no COD) |
|
||||
| `antik_ocr` | always | `ocr_line` — printed at the foot of the A4 payment stub |
|
||||
|
||||
**Surcharges (`sur_1`…`3`)** — from the codes, in this layout:
|
||||
|
||||
| Codes | `sur_1` | `sur_2` | `sur_3` |
|
||||
|---|---|---|---|
|
||||
| 002 | 002 ΕΙΔΙΚΗ ΔΙΑΧΕΙΡΗΣΗ | | |
|
||||
| 002 + 003 | 002 … | 003 ΠΡΟΚΑΘΟΡΙΣΜΕΝΗ ΩΡΑ | |
|
||||
| 002 + 003 + 004 | 002 … | 003 … | 004 ΕΠΙΔΟΣΗ ΣΑΒΒΑΤΟΥ |
|
||||
| 002 + 004 | 002 … | 004 ΕΠΙΔΟΣΗ ΣΑΒΒΑΤΟΥ | |
|
||||
| 003 | | 003 … | |
|
||||
| 003 + 004 | | 003 … | 004 … (entry screen) / `sur_1` = 004 (batch) |
|
||||
| 004 | | 004 … (entry screen) / `sur_1` = 004 (batch) | |
|
||||
| 917 (PostBox) | `* ΠΡΟΣΟΧΗ PostBox *` | (003/004 as above) | |
|
||||
|
||||
(The entry screen and batch printing place 004 differently when 002 is absent — a client
|
||||
inconsistency; `sur_4` exists in the A4 report but is never filled.)
|
||||
|
||||
Fields in the dataset that no code fills: `service_thirida`, `axia`, `sur_4`, `antik_7`.
|
||||
|
||||
## B4. Extra parcel labels (`print_child`)
|
||||
|
||||
For each `vg_child_no` (k = 2, 3, …; n = pieces):
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| `sydeta`, `barcode` | The **parcel's own** number / `*number*` |
|
||||
| `temaxia` | Label: `"00k/00n"` (e.g. `002/003`); A4: `n` |
|
||||
| `periexomeno` | A4 only: `"00k/00n"` — printed large in the child report |
|
||||
| `polaplo` | Label: `ΠΟΛΛΑΠΛΗ ΑΠΟΣΤΟΛΗ - MASTER : <main voucher>` |
|
||||
| `copy` | Label: `ΠΟΛΛΑΠΛH`; A4: `"*" + main voucher + "*"` (under `ΜASTER ΣΥΔΕΤΑ`) |
|
||||
| `antik_minima`, `antik_1` | COD: `* ΠΡΟΣΟΧΗ ΑΝΤΙΚΑΤΑΒΟΛΗ *` — **no amount** (collected on the main voucher) |
|
||||
| sender, recipient, `date`, `time`, `service`, `service_title`, `baros`, stations, `sxolia_1`…`3` | As on the main voucher |
|
||||
| Not set | `barcode_2`, `xreosi`, `siimvasi`, `sur_*`, `ogos_*`, other `antik_*`, reference (label) |
|
||||
|
||||
## B5. What each report prints
|
||||
|
||||
### A4 main voucher — `sydetaE.rdlc`
|
||||
|
||||
One A4 page, three bands separated by cut lines, each with a side strip naming the copy:
|
||||
|
||||
| Band | Copies (side strips) | Contents |
|
||||
|---|---|---|
|
||||
| 1 (top) | `1. ΑΠΟΣΤΟΛΕΑΣ / SHIPPER`, `3. ΑΡΧΕΙΟ / ΓΡΑΦΕΙΟ ΚΑΤΑΘΕΣΗΣ` | Full voucher: logo, ELTA details, title, barcode, voucher, deposit/destination stations, weight, volumetric, pieces, service, sender, recipient, charge line, surcharges, reference, remarks, COD block, signature boxes, terms |
|
||||
| 2 | `6. ΠΑΡΑΛΗΠΤΗΣ / CONSIGNEE`, `5. ΑΡΧΕΙΟ / ΓΡΑΦΕΙΟ ΕΠΙΔΟΣΗΣ` | Same voucher again, with the sender's signature box, print time, `copy`, `antik_minima`, `apodiksi` |
|
||||
| 3 (payment stub) | `2. - 4. ΛΟΓΙΣΤΗΡΙΟ` | "ΤΑΧΥΠΛΗΡΩΜΗ ΕΙΣΠΡΑΞΗ / ΜΕΤΑΒΙΒΑΣΗ": voucher + barcode, stations, weight, pieces, service, charge, sender (code + name), recipient (name, address, postcode), surcharges, remarks, signature boxes, COD breakdown, **ΠΟΣΟ** (`antik_poso`), date stamp, fees, "Η-αριθμός", "Αρ. Λογ/κής Απόδοσης", and the OCR line below "ΜΗ ΣΗΜΕΙΩΝΕΤΕ ΚΑΤΩ ΑΠΟ ΑΥΤΗ ΤΗ ΓΡΑΜΜΗ" |
|
||||
|
||||
Fields used: `antik_1`–`7`, `antik_minima`, `antik_ocr`, `antik_poso`, `apodiksi`, `barcode`,
|
||||
`baros`, `copy`, `date`, `ogos_1`, `ogos_3`, `ogos_baros`, `periexomeno`, `rec_1`–`5`,
|
||||
`sender_1`–`5`, `service`, `service_title`, `station_apo`, `station_pros`,
|
||||
`station_pros_title`, `sur_1`–`4`, `sxolia_1`–`3`, `sydeta`, `temaxia`.
|
||||
|
||||
Fixed texts (verbatim, typos included):
|
||||
|
||||
- `ΣΥΝΟΔΕΥΤΙΚΟ ΔΕΛΤΙΟ ΤΑΧΥΜΕΤΑΦΟΡΑΣ`
|
||||
- `ΥΠΗΡΕΣΙΑ :`, `Ογκ/κο Βάρος`
|
||||
- `ΧΡΕΩΣΗ ΑΠΟΣΤΟΛΕΑ ΤΡ.ΠΛΗΡ: ΠΙΣΤΩΣΗ` (copies), `ΧΡ. ΑΠΟΣΤ: ΠΙΣΤΩΣΗ` (stub)
|
||||
- `Συν.Χρέωσης (€):` / `Συν.Χρέωσης. (€):` / `Συν.Χρ. (€):`
|
||||
- `Πρόσθετες Υπηρεσίες`, `* ΕΠΙΒΑΡΥΝΣΕΙΣ *`
|
||||
- `* REFERENCE No *` / `* REFERENCE No*`
|
||||
- `* ΠΑΡΑΤΗΡΗΣΕΙΣ *`
|
||||
- `ΓΙΑ ΤΗΝ ΠΑΡΑΛΑΒΗ`, `ΟΝΟΜΑ/ΥΠΟΓΡΑΦΗ`
|
||||
- `ΥΠΟΓΡΑΦΗ ΑΠΟΣΤΟΛΕΑ`, `ΟΝΟΜΑ/ΥΠΟΓΡΑΦΗ ΠΑΡΑΛΗΠΤΗ`
|
||||
- `Ημερομηνία - Ωρα Εκτύπωσης :`, `Ημ/νία:`, `Ώρα:`
|
||||
- `Π Ο Σ Ο`
|
||||
- `Έλαβα γνώση των όρων που αναγράφονται στο αντίγραφο 1 και 6 και τους αποδέχομαι
|
||||
ανεπιφύλακτα` (and a variant ending `...αντίγραφο 1 και τους αποδέχομαι ανεπιφύλακτα`)
|
||||
- `ΕΕΤΤ ΑΜ 99-150 Γενική Αδεια Ταχ/κων Υπηρεσιών`
|
||||
|
||||
Images used, with what they contain:
|
||||
|
||||
| Image | Where | Content |
|
||||
|---|---|---|
|
||||
| `elta`, `elta1` | Band 1/2 top-left | ELTA Courier logo |
|
||||
| `Πλήρηστοιχεία_red1`, `_red2`, `_black` | Next to the logo; stub | **ELTA company details** (see B8) |
|
||||
| `Point2_EETTAM_August2024` | Band 1 | `ΕΕΤΤ ΑΜ: 99-150 Γενική Άδεια Ταχ/κων Υπηρεσιών` |
|
||||
| `Point4_CompanynameEETTAM_August2024` | Band 2 | `ΕΛΛΗΝΙΚΑ ΤΑΧΥΔΡΟΜΕΙΑ Α.Ε. ΕΕΤΤ ΑΜ: 99-150 Γενική Άδεια Ταχ/κων Υπηρεσιών` |
|
||||
| `oroi` | Band 1, vertical | `Ισχύουν οι Γενικοί Οροι Παραχής Υπηρεσιών οι οποίοι βρίσκονται αναρτημένοι στο www.elta-courier.gr και είναι διαθέσιμοι σε ολα τα καταστήματα της εταιρίας.` ("Παραχής", "ολα": ELTA's own spelling, same as the label) |
|
||||
| `ID1__shipper_ec` | Band 1 side | `1.ΑΠΟΣΤΟΛΕΑΣ / SHIPPER` |
|
||||
| `ID3__file_ec` | Band 1 side | `3. ΑΡΧΕΙΟ / ΓΡΑΦΕΙΟ ΚΑΤΑΘΕΣΗΣ` |
|
||||
| `ID6__consignee_ec` | Band 2 side | `6. ΠΑΡΑΛΗΠΤΗΣ / CONSIGNEE` + `ΕΕΤΤ ΑΜ:01-200 Γενική Άδεια Ταχ/κών Υπηρεσιών` |
|
||||
| `ID5__file_store_elta_courier` | Band 2 side | `5. ΑΡΧΕΙΟ / ΓΡΑΦΕΙΟ ΕΠΙΔΟΣΗΣ` |
|
||||
| `ID2_4_logistirio` | Stub side | `2. - 4. ΛΟΓΙΣΤΗΡΙΟ` |
|
||||
| `elta_taxyplirwmi_eispraksi` | Stub header | `ΤΑΧΥΠΛΗΡΩΜΗ ΕΙΣΠΡΑΞΗ / ΜΕΤΑΒΙΒΑΣΗ Ο. Αριθμός Λογ/μού Ταχυπληρωμής 131775-9` |
|
||||
| `elta_chromologiko_simantro` | Stub | ELTA Ταχυπληρωμή logo + `Χρονολογικό Σήμαντρο` (date-stamp box) |
|
||||
| `elta_teli` | Stub | `Τέλη` (fees) |
|
||||
| `elta_h_arithmos` | Stub | `Η - αριθμός` |
|
||||
| `elta_ar__logiostikis_apodosis` | Stub | `Αρ. Λογ/κής Απόδοσης` |
|
||||
| `Point5_ELTACourier_ΑποστολήμαςΕσείς_September2024` | Stub, vertical | ELTA "Hellenic Post" logo + `Αποστολή μας εσείς!` |
|
||||
| `mhn_shmeivnete` | Foot | `ΜΗ ΣΗΜΕΙΩΝΕΤΕ ΚΑΤΩ ΑΠΟ ΑΥΤΗ ΤΗ ΓΡΑΜΜΗ` |
|
||||
|
||||
### A4 extra parcel — `sydetaE1.rdlc`
|
||||
|
||||
A single block: logo (`eltared`) + company details (`Πλήρηστοιχεία_red1`), `ΕΕΤΤ ΑΜ 99-150
|
||||
Γενική Αδεια Ταχ/κων Υπηρεσιών`, `ΣΥΝΟΔΕΥΤΙΚΟ ΔΕΛΤΙΟ ΤΑΧΥΜΕΤΑΦΟΡΑΣ`, barcode + parcel number,
|
||||
`Ημερομηνία - Ωρα Εκτύπωσης :` + date, deposit station / weight / `Ογκ/κο Βάρος` / pieces,
|
||||
`ΥΠΗΡΕΣΙΑ :` + service, destination station, sender (5 lines), recipient (5 lines), and a
|
||||
panel with `** ΠΟΛΛΑΠΛΗ ΑΠΟΣΤΟΛΗ **`, the piece (`002/003`, large), the COD warning,
|
||||
`ΜASTER ΣΥΔΕΤΑ` and the master voucher. No surcharges, reference, remarks, charge line,
|
||||
COD amounts or stub.
|
||||
|
||||
### Label (10.4 × 14.8 cm) — `SydetaLabelE.rdlc`
|
||||
|
||||
Top: logo (`elta_logoblack`), company details (`Πλήρηστοιχεία_black1`), a `ΥΠΗΡΕΣΙΑ:` box
|
||||
(service + title), the EETT box (`Point2_EETTAM_August2024`), date and time,
|
||||
`ΣΥΝΟΔΕΥΤΙΚΟ ΔΕΛΤΙΟ ΤΑΧΥΜΕΤΑΦΟΡΑΣ`, `copy`. Then `Γρ. Επίδοσης :` + destination station;
|
||||
a row of charge (`xreosi`) / OCR reference (`barcode_2`) / `siimvasi`; `Γρ.Κατάθεσης:`,
|
||||
`ΒΑΡΟΣ(Kgr)`, `ΟΓΚΟΜΕΤΡΙΚΟ ΒΑΡΟΣ(Kgr)` (`ogos_2`), `Τεμάχια`; the sender (`ΑΠΟΣΤΟΛΕΑΣ`,
|
||||
5 lines) next to **`ΑΙΤΙΑ ΕΠΙΣΤΡΟΦΗΣ`** (return reasons with tick boxes: `Άγνωστος`,
|
||||
`Ελλειπή Δ/νση`, `Απαράδεκτο`, `Άλλαξε Δ/νση`, `Αζήτητο`); the recipient (`Π Α Ρ Α Λ Η Π Τ Η Σ`,
|
||||
5 lines) next to the COD column (`antik_1`…`7`); `REFERENCE` (`periexomeno`) and
|
||||
`* ΠΑΡΑΤΗΡΗΣΕΙΣ *` (`sxolia_1`, `sxolia_2` — only two lines on the label) next to
|
||||
`* ΕΠΙΒΑΡΥΝΣΕΙΣ *` (`sur_1`…`3`); the `polaplo` line; the terms (`Ισχύουν οι Γενικοί Οροι
|
||||
Παραχής Υπηρεσιών οι οποίοι βρίσκονται αναρτημένοι στο www.elta-courier.gr` / `και είναι
|
||||
διαθέσιμοι σε ολα τα καταστήματα της εταιρίας.` — "Παραχής" is ELTA's typo); the
|
||||
`antik_1` banner; the barcode; the voucher number (`sydeta`).
|
||||
|
||||
## B6. Return voucher ("RETOUR")
|
||||
|
||||
Printed when `return_vg` is not empty (special handling with a return-to party):
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| `copy` | `RETOUR` |
|
||||
| `rec_1`…`5` (**recipient = return-to party**) | `"Κωδικός:" + code`, name (split at 40), address, `"TK:… … ΤΗΛ:…"` |
|
||||
| `sender_1`…`5` (**sender = our recipient**) | name (split at 40), address, `"TK:" + postcode + " " + area`, `"ΤΗΛ: " + phones` |
|
||||
| `sydeta`, `barcode` | `return_vg` |
|
||||
| `barcode_2` | `r_ocr_line` characters 2–14 |
|
||||
| `service`, `service_title` | `461` `RETOUR ΕΝΤΟΣ ΠΟΛΗΣ` if the original service starts with `1`, else `462` `RETOUR ΠΟΛΗ ΠΟΛΗ` |
|
||||
| `xreosi` | `ΧΡΕΩΣΗ ΠΑΡΑΛΗΠΤΗ ΠΙΣΤΩΣΗ` (charged to the recipient) |
|
||||
| `siimvasi` | `131775-9` |
|
||||
| `baros`, `temaxia` | `0.100`, `1` |
|
||||
| `station_apo` / `station_pros` | the original destination station / the return-to party's station |
|
||||
| `sxolia_1`…`3` | `"ΣΥΔΕΤΑ <main voucher> Χρέωση Πελάτη <sender code>"` in 27-char lines |
|
||||
| `antik_poso` / `antik_ocr` | `0.00` / `r_ocr_line` |
|
||||
|
||||
## B7. Cheque-return voucher
|
||||
|
||||
Printed when `epitagh_vg` is not empty (COD by cheque) — carries the cheques back:
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| `copy` | empty |
|
||||
| `rec_*` (**recipient = our sender**) | `"Κωδικός:" + sender code`, sender name, address, TK/area/phone line |
|
||||
| `sender_*` (**sender = our recipient**) | as in B6 |
|
||||
| `sydeta`, `barcode`, `barcode_2` | `epitagh_vg`, `*epitagh_vg*`, `e_ocr_line` characters 2–14 |
|
||||
| `service`, `service_title` | `350` `ΕΠΙΣΤΡΟΦΗ ΑΞΙΟΓΡΑΦΩΝ` |
|
||||
| `xreosi` | `ΧΡΕΩΣΗ ΠΑΡΑΛΗΠΤΗ ΠΙΣΤΩΣΗ` |
|
||||
| `siimvasi`, `baros`, `temaxia` | `131775-9`, `0.100`, `1` |
|
||||
| `station_apo` / `station_pros` | the original destination station / the user's station |
|
||||
| `sxolia_*` | `"ΣΥΔΕΤΑ <main voucher> Χρέωση Πελάτη <sender code>"` |
|
||||
| `antik_poso` / `antik_ocr` | `0.00` / `e_ocr_line` |
|
||||
|
||||
## B8. ELTA company details (as printed, from ELTA's current images)
|
||||
|
||||
```
|
||||
ΕΛΛΗΝΙΚΑ ΤΑΧΥΔΡΟΜΕΙΑ Α.Ε.
|
||||
Έδρα: Λεωφ. Ιωνίας 200 & Ιακωβάτων 61,
|
||||
111 44 Αθήνα
|
||||
Α.Φ.Μ.: 094026421 | Δ.Ο.Υ.: ΚΕ.ΦΟ.Δ.Ε. ΑΤΤΙΚΗΣ
|
||||
Τ. 210-6073000 | Ε. info@elta-courier.gr
|
||||
www.elta-courier.gr
|
||||
Γ.Ε.ΜΗ: 001092101000
|
||||
```
|
||||
|
||||
EETT licence: `ΕΕΤΤ ΑΜ: 99-150 Γενική Άδεια Ταχ/κων Υπηρεσιών` (the older `01-200` still
|
||||
appears on the consignee copy strip and the legacy reports, whose company block reads
|
||||
`ΤΑΧΥΜΕΤΑΦΟΡΕΣ ΕΛΤΑ Α.Ε., Λ.Μεσογείων 395, Αγία Παρασκευή, 153 43, ΤΗΛ:210 6073000
|
||||
FAX:2106073100, ΑΦΜ: 099759170 ΔΟΥ ΦΑΕ ΑΘΗΝΩΝ, Ε.Ε.Τ.Τ. ΑΜ 01-200` — not current).
|
||||
|
||||
## B9. Other printouts (reports lists)
|
||||
|
||||
| Report | Screen | Columns |
|
||||
|---|---|---|
|
||||
| `Report1` (landscape) | Index, simple | ΣΥ.ΔΕ.ΤΑ., ΒΑΡΟΣ, ΤΕΜΑΧΙΑ, ΠΑΡΑΛΗΠΤΗΣ, ΔΙΕΥΘΥΝΣΗ, Τ.Κ., ΣΤΑΘΜΟΣ, ΑΠΟΣΤΟΛΕΑΣ, REFERENCE No; title `ΚΑΤΑΣΤΑΣΗ ΣΥ.ΔΕ.ΤΑ.` + date range; totals row `ΣΥΝΟΛΑ` (weight, pieces) |
|
||||
| `Report3` (landscape) | Index, extended | the above + ΤΗΛΕΦΩΝΑ, ΑΝΤ/ΛΗ, ΣΥΔΕΤΑ ΕΠΙΤΑΓΗΣ, ΣΥΔΕΤΑ ΕΠΙΣΤΡΟΦΙΚΟΥ |
|
||||
| `Report2` (landscape) | Multiple search | ΣΥ.ΔΕ.ΤΑ., REFERENCE, ΠΑΡΑΛΗΠΤΗΣ, Τ.Κ., ΣΤΑΘΜΟΣ, ΑΝΤ/ΒΟΛΗ, ΤΕΛΕΥΤΑΙΟ STATUS, ΣΧΟΛΙΑ |
|
||||
|
||||
---
|
||||
|
||||
# Part C — Where our integration differs (as of 0.29.3)
|
||||
|
||||
Rows marked **Fixed** are handled since 0.31.0 (see CHANGELOG); the "Ours" column describes the fixed behaviour.
|
||||
|
||||
## Verified against ELTA's test account (2026-09-30)
|
||||
|
||||
All with generic test data (`TEST RECIPIENT`, `TEST ADDRESS 1`, `10431`, `2100000000`,
|
||||
references `TEST-…`); pending vouchers were deleted afterwards. One issued voucher remains
|
||||
on the shared account: `NZ000987460GR` (+ return voucher `NZ000987473GR`).
|
||||
|
||||
| Check | Result |
|
||||
|---|---|
|
||||
| HTTPS | Works on `https://clients.elta-courier.gr` (443); fails on the old IP and on port 9003 (see A1) |
|
||||
| Envelope/parcel flag | Accepted. ELTA trims the padding and **keeps the flag as the last character of the remarks** (`TEST REMARK2`, also in tracking `a_sxolia`). Whether ELTA also reads it as the parcel type isn't visible through the API |
|
||||
| Surcharge slots | Stored exactly in the slot sent (`004` in slot 1 stays `004\|000\|000`); ELTA does not normalize. Tracking (`a_services`) shows only the service, never surcharges, so their effect can't be read back. ELTA's own client only reads Saturday from slot 3 (B3), so `004` in slot 1 would not print as Saturday there |
|
||||
| Blank service | Accepted, but ELTA stores **`201` ΠΟΛΗ ΠΟΛΗ** for 10431, where its own lookup (`PELTKNEW`) gives **`101` ΕΝΤΟΣ ΠΟΛΗΣ** for the test station — a blank service can land on a different service than the client would send. Explicit `101`/`201` are honoured |
|
||||
| Localities | Common: 45500 Ιωάννινα has 190 localities (170 hard-to-reach → `231`), 20100 Κόρινθος 41 (16), 72200 Χίος 56 (31); islands get `211` ΠΟΛΗ ΠΟΛΗ -ΠΠ- ΝΗΣΙ |
|
||||
| Insurance | `pel_asf_poso = 50.00` is stored; effect not visible |
|
||||
| No phones / 21 pieces | Both accepted at creation (the limits are the client's); not tested at issue |
|
||||
| Remarks > 90 | 95 characters accepted and stored in full (90 is the client's limit) |
|
||||
| Special handling + return-to | Issuing returned a **return voucher** (`return_vg` + `r_ocr_line`); tracking lists it in `a_vg_2` |
|
||||
| Tracking by reference | `PELTTNEW01` with our reference (`00000007`) returns the voucher |
|
||||
| Delivery / remittance fields | Present in `pel_rec` (`a_rec_name`, `a_rec_date_time`, `a_antik1`, `a_antik_text1`); empty until delivery |
|
||||
| PostBox lookup (`PELTKBOX`) | `10431` → station `10200` ΑΙΟΛΟΥ 100 (Κ.Κ.), service `101`; `45500`, `84100`, `00000` → `st_flag 1` "Το Τ.Κ. Δεν Εχει PostBox" |
|
||||
|
||||
## The differences
|
||||
|
||||
| # | Topic | ELTA client | Ours | Impact |
|
||||
|---|---|---|---|---|
|
||||
| 1 | Envelope/parcel | Mandatory; remarks right-aligned in 99 chars + `1`/`2` in `pel_paral_sxolia` | Remarks right-aligned in 99 characters (padded by characters) + `2` | **Fixed** |
|
||||
| 2 | Surcharge slots | Fixed: `002`→1, `003`→2, `004`→3, `917`→1 | Fixed slots, as the client | **Fixed** |
|
||||
| 3 | Service | Always resolved first (`PELTKNEW`) and sent | Resolved with `PELTKNEW` (sender station) and sent | **Fixed** (was blank; ELTA then gave `201` where its lookup gives `101`) |
|
||||
| 4 | Localities | Area = `code/title` of the picked locality; hard-to-reach → service `231` | Locality matched by the address's city (accents/case ignored) → `code/title` + its service; no match → blank service, noted on the shipment | **Fixed** |
|
||||
| 5 | Phones | At least one required; PostBox needs `69…` mobile | At least one required; digits only, `30`/`0030` dropped, `69…` → mobile field | **Fixed** (PostBox not offered) |
|
||||
| 6 | Pieces | 1–20 | Refused above 20 | **Fixed** |
|
||||
| 7 | Insurance | Never sent (`" "`) | We send `pel_asf_poso` | Unverified whether ELTA honours it |
|
||||
| 8 | PostBox (`917`) | Supported, with rules (no COD, no special handling, mobile) | "PostBox delivery" extra service: `PELTKBOX` routing, `917` in `pel_sur_1`, the client's rules checked, PostBox texts on the label | **Fixed** |
|
||||
| 9 | Cheque COD | Up to 4 cheques + dates; cheque-return voucher printed | Cash only | Fine for a shop; noted for completeness |
|
||||
| 10 | Special handling + return | Return-to party (`pel_retur_code`); RETOUR voucher printed | Return-to = our sender code; `return_vg` + `r_ocr_line` stored; RETOUR page printed after the parcels (B6) | **Fixed** |
|
||||
| 11 | Remarks length | 90 chars | 90 | — |
|
||||
| 12 | Company details on labels | B8 (Ιωνίας 200, Γ.Ε.ΜΗ) | B8 details on the A4 copies, stub, A4 child and A6 | **Fixed** |
|
||||
| 13 | `Απόδειξη Είσπραξης` | Correct in batch printing | Correct | **Fixed** |
|
||||
| 14 | Side copy strips, stub strips, "Αποστολή μας εσείς" | Images (B5) | Approximated / missing | Cosmetic |
|
||||
| 15 | Tracking by reference | `PELTTNEW01` accepts our reference | We track by voucher only | **Verified** working — could track a voucher whose number we don't have |
|
||||
| 16 | Delivery details | `a_rec_name`, `a_rec_date_time` | Stored from each tracking poll (`meta.delivered_to` / `delivered_at`); shown on the order page and Carrier Vouchers view | **Fixed** |
|
||||
| 17 | COD remittance | `a_antik1`, `a_antik_text1` | Stored (`meta.cod_remitted` / `cod_remittance`); shown as "COD paid back" | **Fixed** |
|
||||
| 18 | Scheme | `https://clients.elta-courier.gr` | `https://clients.elta-courier.gr`, 2 retries on connection errors / 5xx | **Fixed** |
|
||||
Reference in New Issue
Block a user