Salta al contingut principal
DHL · GLS · OCA

DHL i GLS a Odoo: el mòdul OCA, què cobreix i què et mancarà

Hi ha mòdul OCA per a DHL Parcel i hi ha mòdul OCA per a GLS, però no resolen el mateix problema i a Odoo 19 només en sobreviu un. Això és el que envia cadascun al transportista, llegit al seu codi.

DHL i GLS a Odoo

A Odoo 19 hi ha mòdul OCA de DHL Parcel i no hi ha mòdul OCA de GLS. delivery_dhl_parcel està publicat a la branca 19.0 d'OCA/l10n-spain, versió 19.0.1.0.2. delivery_gls_asm va de la 12.0 a la 18.0 i no està migrat. Si el pla era pujar a Odoo 19 i continuar traient etiquetes GLS des de l'albarà, aquest és el primer número que has de mirar.

Comprova-ho tu: demana el manifest a cada branca i mira el codi HTTP: OCA/l10n-spain/19.0/delivery_gls_asm/__manifest__.py retorna 404; la mateixa ruta a 18.0 retorna 200; i la de delivery_dhl_parcel a la 19.0, també 200.

GLS o DHL: per què no és la mateixa decisió

GLS Espanya és paqueteria: bultos petits i xarxa d'agències. La integració es guanya o es perd a l'etiqueta i a l'estat, i la seva raó de ser és el volum: cent etiquetes al dia que ningú vol teclejar.

DHL a Odoo no és una marca: són dos productes amb API diferents. El mòdul OCA ho avisa al seu readme/DESCRIPTION.md: «No es válido para otras integraciones de DHL como el Express, que usan otras APIs». I la documentació oficial d'Odoo 19, a la seva taula de connectors, llista DHL Express i remata: «Other services from DHL are not supported».

La conseqüència: si el teu contracte és DHL Express, el mòdul OCA no et serveix i el connector natiu no ve a Community: a addons/ del repositori públic d'odoo/odoo, a 17, 18 i 19, l'únic mòdul de transportista és delivery_mondialrelay. Si és DHL Parcel Espanya, el mòdul OCA és el camí. És una pregunta per al teu comercial de DHL abans que per al teu integrador.

DHL ParcelGLS
Nom tècnicdelivery_dhl_parceldelivery_gls_asm
Branques publicades13.0 a 19.0 (sense 16.0)12.0 a 18.0. No hi ha 19.0
RecollidesNoSí, amb estats propis
Camps de duanesExisteixen i van buitsNo existeixen

Quin mòdul OCA existeix de debò, i en quin repositori

La confusió comença al lloc equivocat: cerques «OCA DHL Odoo» i aterres a OCA/delivery-carrier, el repositori de logística de l'OCA. Allà no hi és: no hi ha mòdul de DHL en cap branca de la 12.0 a la 19.0, i de GLS només queda una carpeta fantasma a la 16.0 amb un fitxer a dins, static/description/index.html. Ni manifest ni codi.

Els dos mòduls vius són a OCA/l10n-spain, i convé ajustar l'expectativa: a la branca 19.0 d'OCA/delivery-carrier l'únic mòdul que crida l'API d'un transportista és delivery_correos_express; la resta és infraestructura. I a la 19.0 d'OCA/l10n-spain hi ha tres transportistes: delivery_dhl_parcel, delivery_mrw i delivery_seur_atlas.

Què cobreix cada mòdul, llegit al seu codi

A DHL Parcel tot surt d'un mètode, _prepare_dhl_parcel_shipping: un diccionari pla que es llegeix en dos minuts.

  • Etiqueta en PDF, ZPL o EPL adjunta a l'albarà, amb l'AWB i el seguiment.
  • Contra reemborsament a partir del total de la comanda, amb el repartiment de despeses segons l'incoterm.
  • Assegurança opcional, devolucions, tancament de dia per assistent i lliurament abans de les 13:30.
  • Tres límits escrits al mòdul: no cotitza (el seu ROADMAP diu que els enviaments «siempre se cotizan a 0»), nom i adreça es retallen a 40 caràcters, i el pes mínim que viatja és 1 kg encara que el bulto pesi 200 g.

L'equivalent a GLS és _prepare_gls_asm_shipping, més llarg perquè l'API demana remitent i destinatari complets a cada crida:

  • Servei i franja horària per mètode d'enviament, etiqueta PDF i etiqueta de devolució.
  • Seguiment amb historial complet i prova de lliurament adjunta a l'albarà.
  • Recollides com a flux propi: dotze codis de servei marcats com a recollida, amb botó i estats a part.
  • Cancel·lació amb baranes: refresca l'estat i només anul·la si l'enviament continua en «registrado en el transportista»; si no, llança un error i t'envia a gestionar-ho per correu amb GLS.
  • Els seus límits: la referència no pot passar de 15 caràcters (GLS trunca i col·lisionen), tampoc cotitza, i el país del remitent està fixat a Espanya al codi, amb el comentari always 34=Spain.

Duanes i exportació: els camps que l'OCA deixa buits

El buit té una forma concreta: Odoo porta els camps i els mòduls OCA no els fan servir. No falta la informació: és que no viatja. El que Odoo 19 sí que té, a stock_delivery:

  • product.template.hs_code, etiquetat «HS Code», amb l'ajuda «Standardized code for international shipping and goods declaration». És la partida aranzelària.
  • product.template.country_of_origin, etiquetat «Origin of Goods», relació amb res.country.
  • Una classe DeliveryCommodity (docstring literal: «Commodities information are needed for Commercial invoices with each provider») amb producte, quantitat, valor monetari i país d'origen, més dos mètodes que la construeixen. Si el producte no té país d'origen, s'utilitza el del magatzem que expedeix.

El que els mòduls OCA fan amb això: res. Cercar hs_code, customs, aduana, arancel, incoterm o country_of_origin al mòdul sencer de GLS retorna zero resultats. Al de DHL Parcel sí que apareixen, i aquí hi ha el més interessant, perquè apareixen buits:

"Incoterms": self.dhl_parcel_incoterm, # CPT paid, EXW owed "GoodsDescription": "", # [optional] "CustomsValue": "", # [optional] "CustomsCurrency": "", # [optional]

delivery_dhl_parcel · models/delivery_carrier.py · _prepare_dhl_parcel_shipping

Tres camps previstos per l'API i els tres enviats buits: valor declarat, divisa i descripció de la mercaderia. L'incoterm sí que viatja, però fixa't d'on surt (de self, del mètode d'enviament, no de l'albarà) i al codi només hi ha dos valors, CPT i EXW: un de fix per a tot aquest transportista. A GLS l'equivalent és el camp declarado, que també surt buit. I cap dels quatre transportistes que queden a la 19.0 d'aquests dos repositoris (DHL Parcel, MRW, SEUR i Correos Express) esmenta DeliveryCommodity, hs_code ni country_of_origin: la canonada que Odoo va deixar preparada està sense connectar.

El que et falta el dia que exportes:

  • Partida aranzelària i país d'origen, per línia. Existeixen al producte, no surten cap al transportista.
  • Valor declarat i la seva divisa. Previst a l'API de DHL Parcel. S'envia buit.
  • Descripció de la mercaderia. Camp previst. S'envia buit.
  • Document comercial. Una proforma generada des de l'albarà i adjunta a l'enviament. No existeix en cap.
  • Incoterm per enviament. Existeix per transportista, i amb dos valors.

No és un descuit d'aquests dos: és el patró. delivery_schenker envia "customsClearance": False amb el comentari «Customs Clearance not supported for now as it needs a full customs implementation», i el seu ROADMAP inclou el despatx duaner entre el que no està suportat; aquest mòdul arriba a la 18.0 i tampoc és a la 19.0. Quan un mòdul OCA sí que fa duanes de veritat, no ho resol amb un camp: afegeix un model propi amb partida i país d'origen per línia de mercaderia. Aquesta és la mesura real de la feina.

Què passa quan falta un d'aquests camps

Res, i aquest és el problema. Els camps són opcionals a l'API: el transportista accepta l'expedició, retorna seguiment i l'etiqueta surt per la impressora. A Odoo l'albarà queda validat i en verd. El fallo passa després, al despatx de duanes a destinació: el paquet s'atura i algú de la teva empresa tecleja a mà la partida, la descripció i el valor que li demana el transportista. Silenciós a Odoo i sorollós a atenció al client.

Convé ser exacte sobre quan s'aplica. No de Barcelona a Munic: la UE és mercat interior i allà no hi ha frontera duanera. S'aplica en sortir del territori (Regne Unit, Suïssa, Noruega, Andorra, Turquia) i, sense sortir d'Espanya, a Canàries, Ceuta i Melilla. La Ley 37/1992 de l'IVA ho diu a l'article 3: exclou Ceuta i Melilla «en cuanto territorios no comprendidos en la Unión Aduanera» i Canàries «en cuanto territorios excluidos de la armonización de los impuestos sobre el volumen de negocios».

I tampoc no esperis un llindar per sota del qual el tràmit desaparegui. Pel cantó de la importació, que és el que la norma espanyola detalla, el Real Decreto-ley 7/2021 (BOE-A-2021-6872) va transposar el paquet d'IVA del comerç electrònic amb efectes des de l'1 de juliol de 2021: va suprimir l'exempció de les importacions de béns de poc valor «hasta los 22 euros de valor global de la mercancía», i explica que fins a 150 euros de valor intrínsec «se aplica la franquicia aduanera por lo que no se exige una declaración completa ante la Aduana en el momento de la importación». Llegeix-ho al revés: per sota de 150 euros la declaració és més curta, no és zero. I qui l'ha d'omplir continua necessitant descripció, valor i partida: just els camps que el mòdul envia buits.

Quan l'OCA n'hi ha prou i quan necessites alguna cosa més

El mòdul OCA és la resposta correcta si envies dins de la UE sense creuar frontera duanera, si el que vols és deixar de teclejar adreces i no una tarifa exacta a la comanda, i si estàs a Odoo 18 o anterior: o a 19 amb DHL Parcel.

Necessites alguna cosa més si:

  • Exportes amb regularitat, o envies a Canàries, Ceuta o Melilla. La feina no és «instal·lar el mòdul»: és poblar hs_code i país d'origen, estendre el payload i generar el document comercial.
  • Estàs a Odoo 19 amb GLS: avui no hi ha mòdul, així que o es migra delivery_gls_asm o es canvia de via.
  • El teu contracte és DHL Express, o expedeixes amb GLS des de fora d'Espanya.

Una nota de mètode per tancar: estendre un mòdul OCA és la via barata quan el buit és un camp, i deixa de ser-ho quan el buit és un document. Posar la partida i el país d'origen al payload és heretar _prepare_dhl_parcel_shipping i afegir vint línies. Generar una proforma que quadri amb comptabilitat ja és un mòdul, amb plantilla, proves i manteniment en tres versions.

Preguntes freqüents

Hi ha mòdul OCA de DHL per a Odoo 19?

Sí: delivery_dhl_parcel, a OCA/l10n-spain, versió 19.0.1.0.2. No és a OCA/delivery-carrier, on gairebé tothom el busca, i només serveix per a l'API de DHL Parcel: no per a DHL Express.

I de GLS?

A Odoo 19 no. delivery_gls_asm està publicat de la branca 12.0 a la 18.0 a OCA/l10n-spain; a la 19.0 no existeix.

Si falta el valor declarat, em dona error Odoo?

No: són opcionals a l'API. L'enviament es registra, l'etiqueta es genera i l'albarà queda validat; el problema apareix al despatx de duanes a destinació, ja fora d'Odoo.

Continuar per aquí

Logística a OdooExpedició, etiquetes i trackingImplantació de mòduls OCAInstal·lar, estendre i mantenirFitxa del mòdul DHL ParcelAbast, versions i fluxFitxa del mòdul GLSAbast, versions i fluxGLS a Odoo, en detallEl transportista des de l'albaràMòdul natiu o mòdul OCACom decidir en logística

El que fem sobre això

Connector DHLQuè fa, captures, versions i preu.

Exportes i el mòdul se't queda curt?

Mirem el teu contracte, l'API que t'han donat i el catàleg, i et diem si s'arregla estenent el mòdul OCA o cal desenvolupament propi.

Parlar amb un enginyer