feat: empty container Import

This commit is contained in:
hager
2026-09-04 22:43:20 +00:00
parent 2b6c78cf71
commit 3fb5cdf29f
36 changed files with 968 additions and 49 deletions

View File

@@ -912,6 +912,129 @@ Settle assessed duties and taxes within the period notified by the Service Provi
),
];
/* ────────────────────────── IMPORT / EMPTY CONTAINER ─────────────────────── */
/**
* Empty container import — bare equipment railed north from Djibouti for
* repositioning inland. Not a variant of the laden import pack: there is no
* cargo to describe, no VGM to declare, no commercial documents to lodge and no
* customs leg to sell, so the paper is a straight equipment-carriage agreement.
* Priced per box by size (20ft / 40ft) and lane, off an EMPTY_CONTAINER_IMPORT
* rate.
*/
const IMPORT_EMPTY_CONTAINER_BASE: ContractTemplateBase = {
name: "Empty Container Import Contract",
description:
"Railway transport of empty containers from Djibouti (DMP/Nagad) to the agreed Ethiopian terminal for repositioning. Priced per container by size; no cargo, no customs clearing.",
documentTitle: "Empty Container Transportation Service by Railway",
whereasClauses: [
"The Client has requested and agreed to the transportation of empty containers from the Djibouti railway terminals (DMP or Nagad) to the agreed Ethiopian destination terminal using the Addis Ababa\u2013Djibouti railway line.",
"The containers covered by this Agreement carry no cargo, and the Service Provider is engaged for the carriage of the equipment itself.",
"The Service Provider has agreed to transport the empty containers as per the terms of this contract.",
],
articles: [
a(
"objective",
"Objective and Scope of the Services",
`To provide railway transportation services for empty 20ft and/or 40ft containers from the agreed Djibouti loading terminal (DMP or Nagad Railway Station) to the agreed Ethiopian destination terminal.
The scope of the services comprises:
- Terminal handling and loading of the empty containers onto flat wagons at the Djibouti loading terminal.
- Railway transport between the agreed origin and destination terminals.
- Unloading of the empty containers at the destination terminal.
The containers covered by this Agreement carry no cargo. Any container found to be laden at loading falls outside this Agreement and shall be handled and priced as a laden shipment.`,
),
a(
"client-obligations",
"Obligations of the Client",
`Give written/email/electronic shipment instructions to the Service Provider stating the number of empty containers by size (20ft and/or 40ft), the loading terminal and the destination terminal.
Provide the container release order or equivalent instruction from the container owner or its agent, together with the container numbers, before loading.
Warrant that every container tendered is empty, free of residue, and holds no cargo, dunnage or personal effects.
Ensure the containers are presented at the loading terminal, in a condition fit for rail carriage, one day before the planned loading date.
One flat wagon carries either one 40ft container or two 20ft containers.
Book wagons at least five (5) days in advance.
Assign representatives at both ends to oversee container handover.
Collect the empty containers from the destination terminal within three (3) calendar days from the day following the arrival notice.
If the Client fails to collect the containers within the specified period, the Client shall be liable to pay the applicable demurrage, storage and double handling charges of the destination terminal.
Settle all charges due under this Agreement in accordance with the agreed payment terms.`,
),
a(
"provider-obligations",
"Obligations of the Service Provider",
`Provide the agreed number of flat wagons on the agreed loading date, subject to wagon availability and the allocation priority applicable to the booking.
Handle and load the empty containers at the Djibouti loading terminal and unload them at the destination terminal.
Transport the empty containers to the agreed destination terminal and issue an arrival notice to the Client.
Record the condition of each container at handover, and hand over the containers at destination in the condition in which they were received, fair wear and tear from carriage excepted.
Issue the consignment note and the interchange documentation for each shipment.
Notify the Client without delay of any incident affecting the containers in the Service Provider's custody.`,
),
a(
"liability",
"Liability for the Equipment",
`The Service Provider's liability under this Agreement is limited to loss of, or physical damage to, the containers while in its custody between loading at the origin terminal and handover at the destination terminal.
Because the containers carry no cargo, no cargo liability, cargo insurance obligation or cargo declaration arises under this Agreement.
The Service Provider shall not be liable for pre-existing damage recorded at loading, nor for damage arising from a defect in the container itself.
The Client shall indemnify the Service Provider against any claim arising from a container tendered as empty that is later found to contain cargo, residue or prohibited goods.`,
),
a(
"force-majeure",
"Force Majeure",
`Neither party shall be liable for failure to perform its obligations under this Agreement where such failure results from an event beyond its reasonable control, including natural disaster, war, civil unrest, government action, or closure of the railway line or terminals.
The affected party shall notify the other in writing within five (5) calendar days of the occurrence and shall resume performance as soon as the event ceases.`,
),
a(
"pricing",
"Contract Price and Terms of Payment",
`The price is charged per empty container carried, at the agreed rate for each container size (20ft and 40ft) on the agreed origin\u2013destination lane, as set out in the rate schedule to this Agreement.
The price covers terminal handling, loading, railway carriage and unloading as described in the Scope of the Services. It excludes any charge levied by the destination terminal after the free period, and any first-mile or last-mile road leg unless separately agreed.
Payment shall be made in accordance with the payment terms stated in this Agreement; where the price is quoted in USD and settled in Birr, conversion applies the Commercial Bank of Ethiopia's daily selling exchange rate on the date of payment.
The Service Provider may revise the rates on prior written notice to the Client.`,
),
a(
"contract-documents",
"Contract Documents",
`The following form an integral part of this Agreement:
- This Agreement and its rate schedule.
- The container release order or equivalent instruction from the container owner or its agent.
- The shipment instruction given by the Client for each consignment.
- The consignment note and interchange documents issued for each shipment.`,
),
a(
"consignment-notes",
"Consignment Notes",
`A consignment note shall be issued for each shipment, stating the container numbers, sizes, the origin and destination terminals and the recorded condition of each container.
The consignment note is evidence of the containers received for carriage and of their condition at handover.`,
),
a(
"amendment",
"Amendment",
`Any amendment to this Agreement shall be valid only if made in writing and signed by the authorised representatives of both parties.`,
),
a(
"termination",
"Termination of Contract",
`Either party may terminate this Agreement by giving thirty (30) calendar days' prior written notice to the other party.
Either party may terminate this Agreement with immediate effect where the other party commits a material breach and fails to remedy it within fifteen (15) calendar days of written notice.
Termination does not affect any obligation accrued before the effective date of termination, including payment for shipments already performed or in transit.`,
),
a(
"effectiveness",
"Contract Effectiveness",
`This Agreement becomes effective on the date it is signed by the authorised representatives of both parties.`,
),
a(
"duration",
"Contract Period",
`This Agreement shall remain in force for the period stated in the Agreement, unless terminated earlier in accordance with the Termination article.`,
),
a(
"disputes",
"Settlement of Disputes",
`The parties shall attempt to settle any dispute arising out of or in connection with this Agreement amicably.
Failing amicable settlement, the dispute shall be resolved in accordance with the laws of the Federal Democratic Republic of Ethiopia before the competent courts of Ethiopia.`,
),
],
};
/** Build the stored `_CUSTOMS` / `_ETHIOPIAN_CUSTOMS` / `_NO_CUSTOMS` trio for one base pack. */
function splitByCustoms(
base: ContractTemplateBase,
@@ -944,10 +1067,11 @@ function splitByCustoms(
}
/**
* Fourteen templates: import and export each split by customs clearing option
* Fifteen templates: import and export each split by customs clearing option
* (full, Ethiopian-only, none), intercity
* not split at all — it is a domestic Ethiopian movement that crosses no
* border, so there is no customs leg to contract for.
* border, so there is no customs leg to contract for. Empty container import
* is unsplit for the same reason: bare equipment carries no declaration.
*/
export const CONTRACT_TEMPLATE_DEFAULTS: ContractTemplateSeed[] = [
...splitByCustoms(IMPORT_BULK_BASE, "IMPORT_BULK"),
@@ -956,4 +1080,5 @@ export const CONTRACT_TEMPLATE_DEFAULTS: ContractTemplateSeed[] = [
...splitByCustoms(IMPORT_CONTAINER_BASE, "IMPORT_CONTAINER"),
...splitByCustoms(EXPORT_CONTAINER_BASE, "EXPORT_CONTAINER"),
{ ...INTERCITY_CONTAINER_BASE, code: "INTERCITY_CONTAINER" },
{ ...IMPORT_EMPTY_CONTAINER_BASE, code: "IMPORT_EMPTY_CONTAINER" },
];