diff --git a/apps/edr-freight-api/src/modules/companies/services/etrade-business-selection.spec.ts b/apps/edr-freight-api/src/modules/companies/services/etrade-business-selection.spec.ts index 86117d306..1400c069d 100644 --- a/apps/edr-freight-api/src/modules/companies/services/etrade-business-selection.spec.ts +++ b/apps/edr-freight-api/src/modules/companies/services/etrade-business-selection.spec.ts @@ -78,6 +78,27 @@ describe('ETradeService business selection', () => { expect(data.businesses?.[0].activity).toBe('Export trade in minerals'); }); + it("takes the selected licence's trade name as the company name", () => { + const { service } = build(); + const data = service.extractRegistrationData( + { + LicenceNumber: 'MT/AA/14/670/128936/2007', + TradeName: 'Pave Freight Forwarding', + } as ETradeBusinessInfo, + companyInfo(), + ); + expect(data.companyName).toBe('Pave Freight Forwarding'); + }); + + it('falls back to the registered name when the licence has no trade name', () => { + const { service } = build(); + const data = service.extractRegistrationData( + { LicenceNumber: 'x', TradeName: ' ' } as ETradeBusinessInfo, + companyInfo(), + ); + expect(data.companyName).toBe('PAVE LOGISTICS AND TRADING P L C'); + }); + it('lists every licence for the picker, code prefixes stripped', () => { const { service } = build(); const data = service.extractRegistrationData( diff --git a/apps/edr-freight-api/src/modules/companies/services/etrade.service.ts b/apps/edr-freight-api/src/modules/companies/services/etrade.service.ts index fac57238a..5bbcefb7b 100644 --- a/apps/edr-freight-api/src/modules/companies/services/etrade.service.ts +++ b/apps/edr-freight-api/src/modules/companies/services/etrade.service.ts @@ -102,10 +102,16 @@ export class ETradeService { } /** - * `companyInfo` carries the registered organization name (`BusinessName`); - * `businessInfo` only carries the licence's `TradeName`. Pass both so the - * company name resolves to the legal entity rather than the trade name — and - * never to `ManagerNameEng`, which is the manager's personal name. + * `businessInfo` carries the selected licence's `TradeName`; `companyInfo` + * carries the registered organization name (`BusinessName`). The company name + * resolves to the trade name of the licence the customer picked — a TIN + * routinely trades under a name that is not its registered one, and the + * business they selected is the one they operate as here. `BusinessName` is + * the fallback, because eTrade leaves `TradeName` blank on plenty of licences. + * Never `ManagerNameEng`, which is the manager's personal name. + * + * Callers that need the legal entity (tax filings, EIMS seller details) must + * read `companyInfo.BusinessName` themselves — it is not this field. */ extractRegistrationData( businessInfo: ETradeBusinessInfo, @@ -115,7 +121,7 @@ export class ETradeService { return { companyName: - companyInfo?.BusinessName?.trim() || businessInfo.TradeName?.trim() || "", + businessInfo.TradeName?.trim() || companyInfo?.BusinessName?.trim() || "", licenceNumber: businessInfo.LicenceNumber, statusDescription: businessInfo.StatusDescription, dateRegistered: businessInfo.DateRegistered, diff --git a/apps/edr-freight-api/src/modules/eims/eims-seller-cache.service.ts b/apps/edr-freight-api/src/modules/eims/eims-seller-cache.service.ts index be3e3aa8e..7afe644a1 100644 --- a/apps/edr-freight-api/src/modules/eims/eims-seller-cache.service.ts +++ b/apps/edr-freight-api/src/modules/eims/eims-seller-cache.service.ts @@ -118,7 +118,11 @@ export class EimsSellerCacheService implements OnModuleInit { woreda: data.woreda, }); this.cached = { - LegalName: data.companyName || undefined, + // The *legal* entity name, not the licence's trade name that + // `data.companyName` now carries — an EIMS seller is filed under its + // registered name. + LegalName: + companyInfo?.BusinessName?.trim() || data.companyName || undefined, Phone: data.mobilePhone || data.regularPhone || undefined, Region: geo?.Region, Wereda: geo?.Wereda, diff --git a/packages/types/src/freight/etrade.ts b/packages/types/src/freight/etrade.ts index c23492413..2af992b04 100644 --- a/packages/types/src/freight/etrade.ts +++ b/packages/types/src/freight/etrade.ts @@ -76,9 +76,14 @@ export interface ETradeBusinessOption { export interface CompanyRegistrationData { /** - * The registered organization name — `ETradeCompanyInfo.BusinessName`, falling - * back to the licence's `TradeName`. Never the manager/owner's personal name; - * that is {@link managerName}. + * The selected licence's trade name — `ETradeBusinessInfo.TradeName`, falling + * back to the registered organization name (`ETradeCompanyInfo.BusinessName`) + * when eTrade leaves the licence's trade name blank. Never the manager/owner's + * personal name; that is {@link managerName}. + * + * NOT the legal entity name: a TIN often trades under a different name, and + * some hold several licences with different trade names. Anything that needs + * the registered name (tax/EIMS) must read `BusinessName` directly. */ companyName: string; licenceNumber: string;