Zimbabwe's Premier Customs Clearing & Freight Forwarding Company

"We don't just move goods. We move possibilities across Zimbabwe borders."

George Steward is Zimbabwe's premier freight forwarding and customs clearing company, making global trade simple, compliant, and reliable.

Zimbabwe Logistics Company — Global Trade Solutions

"An integrated logistics ecosystem for Zimbabwe businesses"

From product sourcing in China and Dubai to customs clearance at Beitbridge and last-mile delivery across Zimbabwe — we handle the complexity.

Your Trusted Zimbabwe Shipping Company

"Engineered for Certainty in African Trade"

15+ years of experience. 98% on-time delivery rate. ZIMRA licensed. The reliable choice for Zimbabwe's importers and exporters.

Track Your Cargo
  Submit Your Documents for Exact Duty Assessment
Upload your commercial invoice, packing list, or Bill of Lading and our team will calculate your precise ZIMRA duty within 4 business hours.
Accepted: PDF JPG PNG Max 10MB per file Up to 5 files
Estimated results are indicative. For your exact ZIMRA duty figure, upload your shipping documents and we'll confirm the precise amount.
Click to browse or drag & drop files here PDF, JPG or PNG  ·  Max 10MB each  ·  Up to 5 files
Choose how to send your files: Email opens your mail app — just attach and send. WhatsApp opens a chat — zip your files first, then attach the zip.

Zimbabwe's Leading Freight Forwarding Company

George Steward is a Zimbabwean freight forwarding and customs clearing company built for the modern African trader. We combine the rigour of ZIMRA customs expertise with the innovation of global logistics.

Our philosophy: "Simplicity is the ultimate sophistication." In a world of customs complexity at Beitbridge and Zimbabwe's borders, we are the one-touch solution that makes international trade accessible.

Whether clearing goods at Beitbridge, sourcing from China, importing from Dubai, or delivering last-mile across Harare and Bulawayo — we handle complexity with calm precision.

15+
Years Experience
98%
On-Time Delivery
500+
Clients Served
6
Border Posts
Contact Our Experts
George Steward logistics team managing customs clearance at Zimbabwe border
ZIMRALicensed Agent

Our Zimbabwe Logistics & Customs Services

From a single import consignment to a full supply chain programme — we manage every aspect of your Zimbabwe trade needs.

Freight Forwarding Zimbabwe

We move your goods via Air, Sea, Road, and Rail — globally connected, locally precise. Every route optimised for reliability and cost-efficiency for Zimbabwe imports and exports.

Get a quote

Customs Clearing Zimbabwe

We translate complex ZIMRA regulations into smooth clearances. Our expertise ensures your cargo moves legally, efficiently, and on time through Beitbridge and all Zimbabwe borders.

Get a quote

Product Sourcing China & Dubai

Through our networks in China and Dubai, we connect you to trusted suppliers, negotiate the best terms, and manage delivery end-to-end for your Zimbabwe business needs.

Enquire now

Warehousing Solutions

Secure, ZIMRA-bonded storage and inventory management. Keep your goods safe until ready for distribution — defer duties and optimise your supply chain cash flow.

Learn more

Trade Consultancy

Our advisory division helps businesses understand customs law, HS code classification, FTA benefit optimisation, and CBCA compliance — preventing costly mistakes before they happen.

Get advice

Last-Mile Delivery Zimbabwe

We complete the journey — bringing goods directly to your doorstep, warehouse, or customer with guaranteed safety across Harare, Bulawayo, and all Zimbabwe provinces.

Get a quote

Our Values

Integrity

We do what's right — not what's easy. Transparency and honesty guide every decision we make on your behalf.

Excellence

Every shipment deserves our best work. We're committed to exceeding expectations at every touchpoint.

Innovation

We challenge the ordinary in pursuit of greater efficiency and better trade solutions for Zimbabwe businesses.

Partnership

We grow when our clients grow. Your success is our primary metric, and your goals drive our strategy.

Why Choose Zimbabwe's Premier Logistics Company

15+ Years Zimbabwe Experience

Over a decade and a half navigating Zimbabwe's customs landscape. We know every ZIMRA procedure, every border post quirk, and every regulation change.

98% On-Time Delivery

Our precision-focused processes and border post relationships ensure your shipments arrive when promised, consistently across Zimbabwe's logistics network.

Fully Licensed & ZIMRA Compliant

We maintain all necessary ZIMRA certifications, SFAAZ membership, and stay current with every regulatory change so your cargo is always 100% compliant.

Real-Time Communication

You're never left wondering. WhatsApp updates, email confirmations, and a dedicated point of contact at every stage of your consignment's journey.

Transparent Duty Estimates

No hidden costs. No post-clearance surprises. We provide accurate duty calculations upfront, with correct HS code classification and CIF valuation every time.

All Major Border Posts

Beitbridge, Chirundu, Forbes/Mutare, Plumtree, Victoria Falls, and Harare Airport — we have representation and expertise at every entry point into Zimbabwe.

Your Cargo in Capable Hands — Step by Step

01

Submit Your Documents

Share your commercial invoice, packing list, and shipping documents via WhatsApp, email, or our contact form. We assess duty liability, identify required permits, and confirm CIF value for ZIMRA purposes — typically within 4 business hours.

02

Electronic Declaration via ASYCUDA World

Our ZIMRA-licensed clearing agents submit your Bill of Entry (Form 21) electronically via ASYCUDA World. We classify your goods with the correct HS Code, calculate duties accurately, and attach all required documentation — minimising the risk of queries or delays.

03

ZIMRA Assessment & Duty Payment

We liaise directly with ZIMRA assessors, respond to any queries, arrange duty payment (or apply for deferral where applicable), and manage any physical examination of goods at the border or Harare bonded facility.

04

Release & Delivery

Once ZIMRA releases your goods, we coordinate haulage to your delivery point and send you WhatsApp confirmation with your release documents and a full transaction summary. Average clearance: 48 hours from instruction to release.

Customs clearance documentation process Zimbabwe
"They cleared our mining equipment through Beitbridge in 36 hours — a process our previous agent took 3 days to complete."
— David Ncube, Managing Director, Ncube Mining & Resources (Pvt) Ltd

Typical Clearance Timeframes

Commercial Imports (Beitbridge)24–48 hrs
Vehicle Imports48–72 hrs
Transit Cargo (RIT)12–24 hrs
Air Cargo (Harare Airport)4–8 hrs
Bonded Warehouse Entry24 hrs

We Know Your Industry's Requirements

Industries We Serve

Different cargo types carry different ZIMRA permit obligations, inspection requirements, and regulatory frameworks. Our team includes specialists in each major sector — so your clearance is handled by someone who understands your specific compliance obligations.

Why sector expertise matters: A mining machinery import has different permit requirements to a pharmaceutical shipment. Getting the HS code, permits, and inspections right the first time avoids costly holds, re-examinations, and demurrage charges at Zimbabwe's borders.

Tell Us About Your Cargo

Mining & Minerals

Machinery imports, chemical reagents, explosives permits, mineral export clearance. We understand the Mining Act interface with ZIMRA and EMA requirements.

MMCZ PermitsEMAATIP

Agriculture & Tobacco

Tobacco export clearance (TIMB compliance), agro-chemical imports, phytosanitary certificates, grain transit, and fertiliser permits managed end-to-end.

TIMBPhytosanitaryGrain Transit

Automotive

Private and commercial vehicle imports from South Africa, duty assessment by age and engine size, VIN inspection scheduling, and automotive spares clearance.

CBU / SKDVIN InspectionDuty Assessment

Construction & Energy

Heavy plant, transformers, generators, solar equipment, and building materials. Temporary importation (ATIP) managed for project-duration equipment to defer duty.

ATIPHeavy MachinerySolar Imports

FMCG & Retail

Consumer goods, beverages, food, and household products. CBCA pre-shipment inspection coordination, SAZ standards compliance, and high-volume clearance management.

CBCA / CoCSAZ StandardsFood Safety

Pharma & Medical

Medicine import permits (MCAZ), medical equipment, cold chain documentation, and MSD framework clearance for health sector organisations.

MCAZ PermitsCold ChainMSD

Fuel & Energy

Petroleum product transit, fuel import permits, ZERA documentation, tank storage, and pipeline infrastructure cargo cleared through Zimbabwe corridors.

ZERAPetroleum TransitBonded Fuel

Aviation

Aircraft spare parts, ATIP for maintenance equipment, CAAZ permit coordination, avionics, and airframe components — specialised clearance for Zimbabwe's aviation sector.

CAAZATIP AviationAvionics

What Our Clients Say

★★★★★
"George Steward cleared our full 40ft container of mining equipment through Beitbridge in under 36 hours. The ASYCUDA submissions were flawless and the duty calculation was exactly what they quoted. No surprises."
TM
David Ncube
Managing Director, Ncube Mining & Resources — Harare
★★★★★
"We import pharmaceutical products from India and the MCAZ permit requirements are complex. George Steward manages everything — we just send the docs and get a call when our goods are released. Excellent service."
SC
S. Chikwanda
Procurement Manager, Healthcare — Harare
★★★★★
"Switched from our previous agent after repeated Beitbridge holds. George Steward identified the documentation issues immediately, cleared the backlog, and we've had zero border problems since. Our go-to clearing agent."
NK
N. Khumalo
Import Manager, FMCG Distribution — Bulawayo

Our Global Partners

Warehousing Partners

Secure storage solutions across key locations in Zimbabwe and neighbouring countries.

Global Shipping Lines

Partnerships with major maritime carriers — Maersk, MSC, CMA CGM — for reliable ocean freight.

Air Freight Partners

Air cargo specialists for time-sensitive shipments with global reach and express options.

Local Transport Network

Vetted inland hauliers for reliable last-mile delivery and cross-border transport across Zimbabwe.

Critical Update: March 2026

Regulatory Alert: Statutory Instrument 59 of 2026

The Ministry of Industry and Commerce has gazetted SI 59 of 2026, introducing significant changes to the Control of Goods (Import and Export) regulations. These changes impact licensing requirements and prohibitions across several key sectors. If you are planning an importation, contact us to confirm how these rules affect your shipment.

The 10-Year Vehicle Rule

A strict prohibition now applies to the importation of second-hand motor vehicles manufactured 10 or more years prior to the date of importation. Limited exemptions apply for returning residents and diplomats. Vehicles aged 5–9 years continue to attract higher duty rates.

Second-Hand Textile Ban

A total blanket ban has been imposed on the importation and sale of second-hand clothing and textiles. This measure is intended to protect Zimbabwe’s domestic garment industry. The prohibition covers all used apparel regardless of origin.

Restricted Industrial Goods

New licence requirements apply to steel bars, rods, sections, and specific petroleum products imported in containers other than vehicle fuel tanks. Applications must be made through the Ministry of Industry and Commerce before shipment departs.

Download the full SI 59 of 2026 Gazette:

Official Government Gazette  ·  PDF
Download Official Copy
Not sure if SI 59 affects your goods? Contact our team for a compliance check — we review your commodity codes and advise on permit requirements before you commit to a shipment.

Zimbabwe Trade Knowledge Hub

Understanding Zimbabwe's customs landscape helps you plan better shipments, avoid costly errors, and work more confidently with suppliers. These resources are free for all our clients and visitors.

Live Tool

Zimbabwe Import Duty Estimator 2026

Enter your CIF value and cargo type to get an instant duty breakdown — customs duty, surtax, and VAT — based on ZIMRA tariff rates.

$

⚠ Estimates only. Rates based on ZIMRA tariffs — actual duty may vary by HS code, ZIMRA assessment, and current exchange rates. Always confirm with a licensed clearing agent before importing.

  Get Your Exact Duty Figure
The calculator above gives estimates. For your precise ZIMRA duty amount, upload your shipping documents and we'll confirm within 4 business hours.
Accepted: PDF JPG PNG Max 10MB per file Up to 5 files
Estimates only. Rates shown are indicative. Your actual duty depends on the correct HS code classification, ZIMRA current exchange rates, and any applicable permits. Upload documents for a confirmed figure.
Click to browse or drag & drop files here PDF, JPG or PNG  ·  Max 10MB each  ·  Up to 5 files
Choose how to send your files: Email opens your mail app — just attach and send. WhatsApp opens a chat — zip your files first, then attach the zip.
Checklists

Import Document Checklists by Cargo Type

Download the exact document checklist for your cargo category — commercial imports, vehicles, machinery, food products, chemicals, and pharmaceuticals.

Guide

Importing a Vehicle into Zimbabwe — 2026 Guide

Duty rates by age and engine size, VIN inspection, required documents, and what to expect at Beitbridge when your vehicle arrives.

Download Vehicle Import Guide
Explainer

How CBCA Works — Before Your Shipment Departs

Zimbabwe's Consignment Based Conformity Assessment explained: which goods are affected, how to get your CoC, and consequences of non-compliance.

Download CBCA Explainer
FAQ

15 Questions Importers Ask Before Hiring a Clearing Agent

What fees to expect, how long clearance takes, what happens when goods are held, and how to minimise duty using Zimbabwe's trade agreements.

Download FAQ Guide
Updates

ZIMRA Regulatory Updates — Stay Informed

Get notified of tariff changes, new permit requirements, ASYCUDA updates, and CBCA expansions. Choose your preferred channel:

Contact Zimbabwe's Freight Forwarding Experts

Get Your Customs Quote Today

13 Marlborough Drive, Harare, Zimbabwe

Business Hours

Monday – Friday08:00 – 17:00
Saturday09:00 – 13:00
SundayEmergencies only

Send Us a Message

Please enter your name.
Please enter a phone number.
Please enter a valid email address.
Please select a service.
Please enter a message.
We respond within 4 business hours. Or email us directly with cargo details.
⚠️ You've sent a message recently. Please wait a few minutes before submitting again.
'); try { var blob = new Blob([__html], { type: 'text/html' }); var burl = URL.createObjectURL(blob); var __a = document.createElement('a'); __a.href = burl; __a.target = '_blank'; __a.rel = 'noopener'; document.body.appendChild(__a); __a.click(); document.body.removeChild(__a); setTimeout(function(){ URL.revokeObjectURL(burl); }, 10000); } catch(err) { var __a2 = document.createElement('a'); __a2.href = 'data:text/html;charset=utf-8,' + encodeURIComponent(__html); __a2.target = '_blank'; document.body.appendChild(__a2); __a2.click(); document.body.removeChild(__a2); } } // CHECKLIST CONTENTS var checklists = { commercial: { title: 'Commercial Imports — Document Checklist', html: '

Commercial Imports — Required Documents

' + '
✦ All documents must be originals or certified copies. ZIMRA may request additional documents at assessment.
' + '

Mandatory for All Commercial Imports

Additional — Where Applicable

Contact George Steward on +263 780 900 827 to confirm which permits apply to your specific goods.
' }, vehicle: { title: 'Vehicle Import — Document Checklist', html: '

Vehicle Import — Required Documents

' + '
✦ Vehicle imports require VIN verification at the border. Ensure your vehicle is included in the ZIMRA approved list.
' + '

Core Documents

Age-Specific Requirements

At the Border

⚠ Do not ship a vehicle without confirming permit requirements. George Steward can assist with pre-shipment checks.
' }, machinery: { title: 'Machinery & Equipment — Document Checklist', html: '

Machinery & Equipment — Required Documents

' + '
✦ Capital machinery, mining equipment, and agricultural equipment may qualify for reduced or zero duty — confirm category before shipping.
' + '

Standard Documents

Industry-Specific

' }, food: { title: 'Food & Pharmaceutical — Document Checklist', html: '

Food Products & Pharmaceuticals — Required Documents

' + '
✦ Food and pharmaceutical imports are strictly regulated. Non-compliance leads to goods being held or destroyed at the border.
' + '

Food Products

Pharmaceuticals

⚠ MCAZ permits must be obtained BEFORE goods depart. Failure to comply results in seizure at the border.
' } }; function downloadChecklist(type) { var c = checklists[type]; if (!c) return; gsOpenPDF(c.title, c.html); } function downloadVehicleGuide() { gsOpenPDF('Importing a Vehicle into Zimbabwe — 2026 Guide', '

Overview

' + '

Importing a vehicle into Zimbabwe involves ZIMRA customs assessment, duty payment, VIN inspection, and registration. George Steward manages the entire process on your behalf.

' + '

Step-by-Step Process

' + '

Step 1 — Before You Buy

' + '

Duty Rates by Vehicle Age

' + '
Example: A 3-year-old SUV with CIF value USD 15,000:
Duty = 40% × 15,000 = USD 6,000 · VAT = 15% × 21,000 = USD 3,150 · Total: USD 9,150
' + '

Required Documents

' + '

At Beitbridge Border Post

' + '

After Clearance

' + '
George Steward clears vehicles at Beitbridge, Chirundu, Forbes/Mutare, Plumtree, Victoria Falls, and Harare Airport. Call us on +263 780 900 827 before your vehicle departs.
' ); } function downloadCBCA() { gsOpenPDF('How CBCA Works — George Steward Explainer', '

What is CBCA?

' + '

The Consignment Based Conformity Assessment (CBCA) is Zimbabwe\'s system for ensuring imported goods meet national standards before they enter the country. It is administered by the Standards Association of Zimbabwe (SAZ) in partnership with international inspection bodies.

' + '

Which Goods Are Covered?

' + '

CBCA applies to a growing list of goods. Current categories include:

' + '
The CBCA product list is updated periodically. George Steward tracks all changes — contact us before shipping to confirm whether your goods are covered.
' + '

How Does It Work?

' + '

How to Get a CoC

' + '

Consequences of No CoC

' + '
⚠ Goods arriving without a valid CoC will be:
1. Held at border at importer\'s expense
2. Subjected to local conformity testing (costly and slow)
3. If failed: re-exported or destroyed. No exceptions.
' + '
George Steward pre-checks CBCA requirements for every consignment. Call +263 780 900 827 before shipping.
' ); } function downloadFAQ() { gsOpenPDF('15 Questions Importers Ask Before Hiring a Clearing Agent', '

1. What does a customs clearing agent do?

A clearing agent prepares and submits your customs declaration (Bill of Entry) to ZIMRA, calculates duties, liaises with ZIMRA assessors, arranges duty payment, and coordinates release of your goods. George Steward handles the entire process end-to-end.

' + '

2. What fees should I expect?

Standard clearing fees in Zimbabwe are approximately 2% of the CIF value of goods, subject to a minimum fee. George Steward provides a full fee schedule upfront — no hidden charges.

' + '

3. How long does customs clearance take?

' + '

4. What is ASYCUDA World?

ASYCUDA World is Zimbabwe\'s electronic customs management system. All Bills of Entry are submitted electronically through ASYCUDA. George Steward\'s agents are fully trained and licensed ASYCUDA World users.

' + '

5. What is CIF value and why does it matter?

CIF = Cost + Insurance + Freight. ZIMRA calculates duties on the CIF value of goods. Always ensure your commercial invoice reflects the correct CIF value.

' + '

6. Can I reduce my duty legally?

Yes. Zimbabwe is party to SADC and COMESA free trade agreements. Goods originating from member countries attract reduced duty rates. A valid Certificate of Origin is required. George Steward reviews every shipment for FTA eligibility.

' + '

7. What happens if my goods are held by ZIMRA?

George Steward responds to ZIMRA queries immediately, provides any additional documentation requested, and liaises directly with ZIMRA assessors. Goods held for payment are released within hours once duty is settled.

' + '

8. Do I need a separate agent at each border post?

No. George Steward has representation at all six major Zimbabwe entry points: Beitbridge, Chirundu, Forbes/Mutare, Plumtree, Victoria Falls, and Harare Airport.

' + '

9. What is CBCA and do my goods need it?

CBCA (Consignment Based Conformity Assessment) requires a pre-shipment Certificate of Conformity for certain goods. See our CBCA Explainer for the full list. George Steward checks CBCA requirements for every consignment.

' + '

10. How do I appoint George Steward as my clearing agent?

Simply WhatsApp us on +263 780 900 827 or email us directly. We send you a short agent authorisation letter to sign — that\'s all we need to begin work on your consignment.

' + '

11. What is the Import Licence and when do I need one?

Certain goods (vehicles, pharmaceuticals, food, chemicals) require an import licence or permit from the relevant authority before importation. George Steward advises on permit requirements at the quote stage.

' + '

12. Can you source goods from China or Dubai for me?

Yes. George Steward offers product sourcing services, including supplier verification, quality checks, and consolidated shipments from China and Dubai. Contact us for details.

' + '

13. How do I pay customs duty?

Duty is paid to ZIMRA via EFT (USD), RTGS, or ZiG. George Steward facilitates duty payment on your behalf and provides a full duty payment receipt.

' + '

14. Do you handle bonded warehousing?

Yes. George Steward can arrange bonded warehouse storage for goods awaiting duty payment or onward transit.

' + '

15. How quickly can you start?

George Steward can begin processing your consignment within the same business day of receiving your instruction and documents. WhatsApp +263 780 900 827 to get started.

' ); } // SUBSCRIPTION FUNCTIONS function subscribeEmail() { var email = (document.getElementById('subEmail') || {}).value; var name = (document.getElementById('subName') || {}).value; var stat = document.getElementById('subStatus'); if (!email || email.indexOf('@') === -1) { if (stat) { stat.style.display='block'; stat.style.color='#e53e3e'; stat.textContent='Please enter a valid email address.'; } return; } var sub = encodeURIComponent('ZIMRA Updates Subscription — ' + (name || email)); var body = encodeURIComponent('Hello George Steward,\n\nPlease add me to your ZIMRA regulatory updates mailing list.\n\nName: ' + (name || '(not provided)') + '\nEmail: ' + email + '\n\nThank you.'); window.location.href = 'mailto:' + ('hello' + '@' + 'georgesteward.co.zw') + '?subject=' + sub + '&body=' + body; if (stat) { stat.style.display='block'; stat.style.color='#276749'; stat.textContent='✓ Your email client has opened. Send the email to complete your subscription!'; } } function subscribeWA() { var name = (document.getElementById('subName') || {}).value; var email = (document.getElementById('subEmail') || {}).value; var msg = encodeURIComponent('Hello George Steward,\n\nI would like to subscribe to your ZIMRA regulatory updates via WhatsApp.\n\nName: ' + (name || '(please provide)') + '\nEmail: ' + (email || '(not provided)') + '\n\nPlease add me to your updates list. Thank you.'); window.open('https://wa.me/263780900827?text=' + msg, '_blank', 'noopener,noreferrer'); } // =========================================== // ZIMBABWE IMPORT DUTY CALCULATOR // =========================================== document.getElementById('calcTimestamp').value = Date.now(); const _calcLog = []; function calcRateOk() { const now = Date.now(); while (_calcLog.length && now - _calcLog[0] > 60000) _calcLog.shift(); if (_calcLog.length >= 10) return false; _calcLog.push(now); return true; } const TARIFF = { capital_machinery: { duty:0.00, surtax:0, notes:'Capital machinery: 0% duty — ZIMRA productive asset exemption.', sadc:0.00, comesa:0.00 }, mining_equipment: { duty:0.00, surtax:0, notes:'Mining equipment: 0% duty under ZIMRA capital goods category.', sadc:0.00, comesa:0.00 }, agri_equipment: { duty:0.00, surtax:0, notes:'Agricultural equipment: 0% duty — productive sector concession.', sadc:0.00, comesa:0.00 }, solar_renewable: { duty:0.00, surtax:0, notes:'Solar & renewable energy: 0% duty — Zimbabwe incentive policy.', sadc:0.00, comesa:0.00 }, medical_equipment: { duty:0.05, surtax:0, notes:'Medical equipment: 5% duty — health sector reduced rate.', sadc:0.00, comesa:0.00 }, computers_it: { duty:0.10, surtax:0, notes:'Computers & IT equipment: 10% customs duty.', sadc:0.05, comesa:0.00 }, electronics_consumer: { duty:0.25, surtax:0.10, notes:'Consumer electronics: 25% duty + 10% surtax on finished goods.', sadc:0.10, comesa:0.05 }, telecom_equipment: { duty:0.15, surtax:0, notes:'Telecoms equipment: 15% customs duty.', sadc:0.05, comesa:0.00 }, vehicle_new: { duty:0.40, surtax:0, notes:'New/under-5yr vehicle: 40% customs duty. No surtax.', sadc:0.20, comesa:0.20 }, vehicle_old: { duty:0.40, surtax:0.35, notes:'Vehicle over 5 years: 40% duty + 35% surtax — confirmed by ZIMRA.', sadc:0.20, comesa:0.20 }, commercial_vehicle: { duty:0.25, surtax:0, notes:'Commercial vehicle/truck/bus: 25% customs duty.', sadc:0.10, comesa:0.10 }, ev: { duty:0.25, surtax:0, notes:'Electric vehicle: 25% duty (reduced per 2024 EV incentive policy).', sadc:0.10, comesa:0.05 }, clothing_textiles: { duty:0.40, surtax:0.10, notes:'Clothing & textiles: 40% duty + 10% surtax — local industry protection.',sadc:0.15, comesa:0.10 }, fmcg_food: { duty:0.25, surtax:0.10, notes:'Food & FMCG: 25% duty + 10% surtax on finished consumer goods.', sadc:0.10, comesa:0.05 }, household_goods: { duty:0.40, surtax:0.10, notes:'Household goods & furniture: 40% duty + 10% surtax.', sadc:0.20, comesa:0.15 }, building_materials: { duty:0.20, surtax:0, notes:'Building materials & hardware: 20% customs duty.', sadc:0.10, comesa:0.10 }, pharma_medicines: { duty:0.05, surtax:0, notes:'Pharmaceuticals: 5% duty — health sector concession rate.', sadc:0.00, comesa:0.00 }, raw_materials: { duty:0.05, surtax:0, notes:'Raw materials: 5% duty — manufacturing input support rate.', sadc:0.00, comesa:0.00 }, general_goods: { duty:0.20, surtax:0.10, notes:'General goods: 20% duty + 10% surtax — standard finished goods rate.', sadc:0.10, comesa:0.05 }, }; const VAT_RATE = 0.15; function fmtUSD(n) { return '$' + n.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function fmtPct(n) { return (n * 100).toFixed(0) + '%'; } function runCalc() { const resultDiv = document.getElementById('calcResult'); // Honeypot check if (document.getElementById('calc_hp').value !== '') return; // Timestamp check const age = Date.now() - parseInt(document.getElementById('calcTimestamp').value || '0'); if (age < 500) return; // Rate limit if (!calcRateOk()) { resultDiv.innerHTML = '

Too many calculations — please wait a moment.

'; resultDiv.classList.add('show'); return; } const cifRaw = parseFloat(document.getElementById('calc_cif').value); const cat = document.getElementById('calc_category').value; const origin = document.getElementById('calc_origin').value; if (!cifRaw || cifRaw <= 0) { resultDiv.innerHTML = '

Please enter a valid CIF value.

'; resultDiv.classList.add('show'); return; } if (!cat) { resultDiv.innerHTML = '

Please select a cargo category.

'; resultDiv.classList.add('show'); return; } if (cifRaw > 10000000) { resultDiv.innerHTML = '

For shipments over $10M please contact our team for a precise assessment.

'; resultDiv.classList.add('show'); return; } const tariff = TARIFF[cat]; const cif = cifRaw; let dutyRate = tariff.duty; let isFTA = false; let ftaName = ''; if (origin === 'sadc' && tariff.sadc < tariff.duty) { dutyRate = tariff.sadc; isFTA = true; ftaName = 'SADC Trade Agreement'; } if (origin === 'comesa' && tariff.comesa < tariff.duty) { dutyRate = tariff.comesa; isFTA = true; ftaName = 'COMESA Trade Agreement'; } // ZIMRA Calculation: // VDP = CIF value // Customs Duty = VDP x duty rate // Surtax = VDP x surtax rate (where applicable) // VTP = VDP + Customs Duty // VAT = VTP x 15% const vdp = cif; const customsDuty = vdp * dutyRate; const surtax = vdp * tariff.surtax; const vtp = vdp + customsDuty; const vat = vtp * VAT_RATE; const totalDuty = customsDuty + surtax + vat; const totalLanded = cif + totalDuty; const effectivePct = ((totalDuty / cif) * 100).toFixed(1); const stdDuty = vdp * tariff.duty; const saving = isFTA ? (stdDuty - customsDuty) : 0; const free = (n) => n === 0 ? 'FREE' : '' + fmtUSD(n) + ''; resultDiv.innerHTML = '
' + 'Duty Breakdown' + 'CIF: ' + fmtUSD(cif) + '  ·  ' + effectivePct + '% effective rate' + '
' + '
CIF Value (basis for calculation)' + fmtUSD(cif) + '
' + '
Customs Duty (' + fmtPct(dutyRate) + ' of VDP' + (isFTA ? ' — ' + ftaName : '') + ')' + free(customsDuty) + '
' + (tariff.surtax > 0 ? '
Surtax (' + fmtPct(tariff.surtax) + ' of VDP)' + fmtUSD(surtax) + '
' : '') + '
VAT (15% of VTP = ' + fmtUSD(vtp) + ')' + fmtUSD(vat) + '
' + '
Total Duty & Taxes Due' + fmtUSD(totalDuty) + '
' + '
Total Landed Cost' + fmtUSD(totalLanded) + '
' + (isFTA ? '
FTA saving vs standard rate: ' + fmtUSD(saving) + ' — ensure you hold a valid Certificate of Origin
' : '') + (dutyRate === 0 && !isFTA ? '
This category qualifies for ZIMRA duty exemption — only VAT applies
' : '') + '

' + tariff.notes + '

' + '
' + ' Get Official Quote' + ' Confirm on WhatsApp' + '
'; resultDiv.classList.add('show'); if (window.gtag) gtag('event', 'duty_calc_used', { event_category: 'tool', event_label: cat, value: Math.round(totalDuty) }); } document.getElementById('calc_cif').addEventListener('keydown', function(e) { if (e.key === 'Enter') runCalc(); }); // ======================================================= // DOCUMENT UPLOAD ENGINE — georgesteward.co.zw // Bot protection: honeypot + timestamp + rate limit // File validation: PDF/JPG/PNG, 10MB max, 5 files max // Dispatch: WhatsApp notification + mailto email // ======================================================= document.getElementById('tdocTimestamp').value = Date.now(); document.getElementById('cdocTimestamp').value = Date.now(); // Rate limit: max 3 submissions per 5 minutes per widget var _docLog = { track: [], calc: [] }; function docRateOk(w) { var now = Date.now(); while (_docLog[w].length && now - _docLog[w][0] > 300000) _docLog[w].shift(); if (_docLog[w].length >= 3) return false; _docLog[w].push(now); return true; } // File store var _docFiles = { track: [], calc: [] }; var MAX_FILES = 5; var MAX_SIZE = 10485760; // 10MB var ALLOWED_TYPES = ['application/pdf','image/jpeg','image/png']; var ALLOWED_EXTS = ['.pdf','.jpg','.jpeg','.png']; function getW(w) { var p = w === 'track' ? 'tdoc' : 'cdoc'; return { hp: p + '_hp', ts: p + 'Timestamp', name: p + '_name', ph: p + '_phone', type: p + '_type', drop: p + 'DropZone', inp: p + 'Files', chips:p + 'Chips', ferr: p + 'FileError', sub: p + 'SubmitBtn', rate: p + 'RateMsg', stat:p + 'Status' }; } function esc(s) { return String(s).replace(/[&<>"']/g, function(c) { return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]; }); } function renderChips(w) { var ids = getW(w); var el = document.getElementById(ids.chips); el.innerHTML = _docFiles[w].map(function(f, i) { var name = f.name.length > 28 ? f.name.substring(0,26)+'...' : f.name; return ' ' + esc(name) + ' '; }).join(''); } function removeDocFile(w, idx) { _docFiles[w].splice(idx, 1); renderChips(w); } function handleDocFiles(w, files) { var ids = getW(w); var errEl = document.getElementById(ids.ferr); errEl.classList.remove('show'); for (var i = 0; i < files.length; i++) { var f = files[i]; if (_docFiles[w].length >= MAX_FILES) { errEl.textContent = 'Maximum ' + MAX_FILES + ' files allowed.'; errEl.classList.add('show'); break; } var ext = '.' + f.name.split('.').pop().toLowerCase(); if (ALLOWED_TYPES.indexOf(f.type) === -1 && ALLOWED_EXTS.indexOf(ext) === -1) { errEl.textContent = esc(f.name) + ' — only PDF, JPG, or PNG files are accepted.'; errEl.classList.add('show'); continue; } if (f.size > MAX_SIZE) { errEl.textContent = esc(f.name) + ' exceeds 10MB. Please compress or split the file.'; errEl.classList.add('show'); continue; } // Deduplicate var dup = false; for (var j = 0; j < _docFiles[w].length; j++) { if (_docFiles[w][j].name === f.name && _docFiles[w][j].size === f.size) { dup = true; break; } } if (!dup) _docFiles[w].push(f); } renderChips(w); } // Wire up file inputs and drag-drop ['track','calc'].forEach(function(w) { var ids = getW(w); var inp = document.getElementById(ids.inp); var zone = document.getElementById(ids.drop); if (!inp || !zone) return; inp.addEventListener('change', function() { handleDocFiles(w, this.files); this.value = ''; }); zone.addEventListener('dragover', function(e) { e.preventDefault(); this.classList.add('drag-over'); }); zone.addEventListener('dragleave', function() { this.classList.remove('drag-over'); }); zone.addEventListener('drop', function(e) { e.preventDefault(); this.classList.remove('drag-over'); handleDocFiles(w, e.dataTransfer.files); }); }); function validateDocForm(w) { var ids = getW(w); var name = document.getElementById(ids.name).value.trim(); var phone = document.getElementById(ids.ph).value.trim(); if (!name) return 'Please enter your name.'; if (!phone) return 'Please enter your phone / WhatsApp number.'; if (_docFiles[w].length === 0) return 'Please upload at least one document (PDF, JPG, or PNG).'; return null; } function submitDocs(w) { var ids = getW(w); var statEl = document.getElementById(ids.stat); var rateEl = document.getElementById(ids.rate); var btn = document.getElementById(ids.sub); // Bot protection if (document.getElementById(ids.hp).value !== '') return; if (Date.now() - parseInt(document.getElementById(ids.ts).value || '0') < 800) return; if (!docRateOk(w)) { rateEl.textContent = 'Too many submissions — please wait a few minutes before trying again.'; rateEl.classList.add('show'); setTimeout(function() { rateEl.classList.remove('show'); }, 8000); return; } var err = validateDocForm(w); if (err) { statEl.className = 'doc-status error show'; statEl.innerHTML = ' ' + err; return; } var name = document.getElementById(ids.name).value.trim(); var phone = document.getElementById(ids.ph).value.trim(); var dtype = document.getElementById(ids.type).value; var flist = _docFiles[w].map(function(f){ return f.name; }).join('\n - '); var ctx = w === 'track' ? 'Container Tracking' : 'Duty Calculator'; // ── EMAIL: opens client's mail app with pre-filled details // Client attaches the files they already have selected, clicks Send. // Files land in the company inbox as real attachments. var mailSub = encodeURIComponent('Document Submission — ' + dtype + ' — ' + name); var mailBody = encodeURIComponent( 'Hello George Steward,\n\n' + 'Please find my shipping documents attached to this email.\n\n' + 'SUBMISSION DETAILS\n' + '──────────────────\n' + 'Name: ' + name + '\n' + 'Phone/WhatsApp: ' + phone + '\n' + 'Document Type: ' + dtype + '\n' + 'Source: ' + ctx + ' form\n' + 'Files: \n - ' + flist + '\n\n' + 'IMPORTANT: The files listed above are attached to this email.\n' + 'Please assess duty and respond within 4 business hours.\n\n' + 'Thank you.\n' + '──────────────────\n' + 'Sent from georgesteward.co.zw' ); var _em = 'hello' + '@' + 'georgesteward.co.zw'; var mailLink = 'mailto:' + _em + '?subject=' + mailSub + '&body=' + mailBody; btn.disabled = true; btn.innerHTML = ' Preparing...'; // Open the email client after a short delay so button state updates first setTimeout(function() { window.location.href = mailLink; }, 350); statEl.className = 'doc-status success show'; statEl.innerHTML = ' Your email app is opening now.

' + 'The email is pre-filled with your details. ' + 'Simply attach your files and click Send — ' + 'your documents will arrive directly in our inbox and we will respond within 4 business hours.

' + '' + ' ' + 'On mobile: tap the paperclip icon in your mail app to attach files. ' + 'On desktop: drag your files into the email window. ' + 'Prefer WhatsApp? Use the Send via WhatsApp button instead.' + ''; setTimeout(function() { btn.disabled = false; btn.innerHTML = ' Send for Assessment'; _docFiles[w] = []; renderChips(w); }, 60000); } // ------------------------------------------------------- // submitDocsWA — zips selected files in the browser, // triggers download of the zip, then opens WhatsApp // with a pre-filled message instructing the client // to attach the zip that just downloaded. // ------------------------------------------------------- function submitDocsWA(w) { var ids = getW(w); var statEl = document.getElementById(ids.stat); var btn = document.getElementById(ids.sub); // Validate — must have files selected if (_docFiles[w].length === 0) { statEl.className = 'doc-status error show'; statEl.innerHTML = ' Please select at least one file before sending via WhatsApp.'; return; } var name = document.getElementById(ids.name).value.trim() || 'Client'; var phone = document.getElementById(ids.ph).value.trim() || 'Not provided'; var dtype = document.getElementById(ids.type).value; var ctx = w === 'track' ? 'Container Tracking' : 'Duty Calculator'; var waNum = '263780900827'; var ts = new Date().toISOString().slice(0,10); // YYYY-MM-DD var zipName = 'GeorgeSteward_Docs_' + name.replace(/\s+/g,'_') + '_' + ts + '.zip'; // Show zipping state statEl.className = 'doc-status show'; statEl.style.background = 'rgba(248,195,0,.1)'; statEl.style.border = '1px solid rgba(248,195,0,.4)'; statEl.style.color = '#f8c300'; statEl.innerHTML = ' Zipping your files — please wait...'; // Check JSZip loaded if (typeof JSZip === 'undefined') { statEl.className = 'doc-status error show'; statEl.style = ''; statEl.innerHTML = ' Zip library not loaded. Please check your internet connection and try again, or use Send via Email instead.'; return; } var zip = new JSZip(); var folder = zip.folder('GeorgeSteward_Documents'); // Read all files as ArrayBuffers and add to zip var filePromises = _docFiles[w].map(function(file) { return new Promise(function(resolve, reject) { var reader = new FileReader(); reader.onload = function(e) { folder.file(file.name, e.target.result); resolve(); }; reader.onerror = reject; reader.readAsArrayBuffer(file); }); }); Promise.all(filePromises).then(function() { return zip.generateAsync({ type: 'blob', compression: 'DEFLATE', compressionOptions: { level: 6 } }); }).then(function(zipBlob) { // ── Step 1: Download the zip to the client's device ── var zipUrl = URL.createObjectURL(zipBlob); var a = document.createElement('a'); a.href = zipUrl; a.download = zipName; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function() { URL.revokeObjectURL(zipUrl); }, 15000); // ── Step 2: Build WhatsApp message with clear attachment instruction ── var flist = _docFiles[w].map(function(f){ return f.name; }).join(', '); var waMsg = encodeURIComponent( '*Document Submission \u2014 George Steward*\n\n' + '*Name:* ' + name + '\n' + '*Phone:* ' + phone + '\n' + '*Document Type:* ' + dtype + '\n' + '*Files:* ' + flist + '\n' + '*Source:* ' + ctx + '\n\n' + '\u2705 *Your zip file has been saved to your device.*\n\n' + '*To complete your submission:*\n' + '1\ufe0f\u20e3 Tap the \ud83d\udcce *paperclip / attachment icon* in this chat\n' + '2\ufe0f\u20e3 Select *\u201c' + zipName + '\u201d* from your Downloads folder\n' + '3\ufe0f\u20e3 Tap *Send*\n\n' + 'We will confirm receipt and respond with your duty assessment within 4 business hours.\n' + '_George Steward \u2014 georgesteward.co.zw_' ); // ── Step 3: Open WhatsApp after short delay (zip download needs a moment) ── setTimeout(function() { window.open('https://wa.me/' + waNum + '?text=' + waMsg, '_blank', 'noopener,noreferrer'); }, 800); // ── Step 4: Show success with crystal-clear next-step instructions ── statEl.className = 'doc-status success show'; statEl.style = ''; statEl.innerHTML = ' Zip file created and saved to your device!

' + 'Now do these 3 steps in WhatsApp:' + '
    ' + '
  1. WhatsApp is opening — wait for it
  2. ' + '
  3. Tap the paperclip icon in the chat
  4. ' + '
  5. Find ' + zipName + ' in your Downloads and tap Send
  6. ' + '
' + '' + ' ' + 'Your zip file is in your Downloads folder. ' + 'On Android: Files app \u2192 Downloads. On iPhone: Files app \u2192 On My iPhone \u2192 Downloads.' + ''; }).catch(function(err) { statEl.className = 'doc-status error show'; statEl.style = ''; statEl.innerHTML = ' Could not create zip file. ' + 'Please try Send via Email instead, or contact us directly on ' + 'WhatsApp.'; console.error('JSZip error:', err); }); } // ── Bot-safe email links ── // Email is never in href. Built at click-time from data attributes. document.addEventListener('click', function(e) { var el = e.target.closest('.gs-email-link'); if (!el) return; e.preventDefault(); var addr = el.getAttribute('data-u') + '@' + el.getAttribute('data-d'); // If link has no subject context, just open plain mailto window.location.href = 'mailto:' + addr; });