From 1cabe9a1ab23d78fa579ac538844bd9a58f7a98c Mon Sep 17 00:00:00 2001 From: Loredana Perazzo Date: Tue, 24 Jun 2025 14:02:10 +0200 Subject: [PATCH] [ADD] POS: Scale certification content task-4893590 --- .../general/iot/devices/scale.rst | 13 +-- content/applications/sales/point_of_sale.rst | 1 + .../sales/point_of_sale/pos_hardware.rst | 108 ++++++++++++++++++ .../pos_hardware/legal-requirements.png | Bin 0 -> 16053 bytes .../point_of_sale/pos_hardware/weigh.png | Bin 0 -> 6532 bytes 5 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 content/applications/sales/point_of_sale/pos_hardware.rst create mode 100644 content/applications/sales/point_of_sale/pos_hardware/legal-requirements.png create mode 100644 content/applications/sales/point_of_sale/pos_hardware/weigh.png diff --git a/content/applications/general/iot/devices/scale.rst b/content/applications/general/iot/devices/scale.rst index 371dfbb033..eaae14fe2e 100644 --- a/content/applications/general/iot/devices/scale.rst +++ b/content/applications/general/iot/devices/scale.rst @@ -3,13 +3,9 @@ Connect a scale =============== .. important:: - - In EU member states, `certification is legally required - `_ - to use a scale as an integrated device. - - Odoo is not certified in several countries, including France, Germany, and Switzerland. If you - reside in one of these countries, you can still use a scale but without integration into your - Odoo database. Alternatively, you can acquire a *non-integrated* certified scale that prints - certified labels, which can then be scanned into your Odoo database. + In EU member states, `certification is legally required + `_ + to use a scale as an integrated device. To connect a scale to the IoT system, use a USB cable. In some cases, you may need a serial-to-US adapter to complete the connection. If the scale is `compatible with an IoT system @@ -33,7 +29,8 @@ settings: #. Click :guilabel:`Save`. .. seealso:: - :doc:`Connect an IoT system to a POS ` + - :doc:`Connect an IoT system to a POS ` + - :ref:`Configure a POS for a scale ` The scale is then available in all the :doc:`POS's sessions `. If a product is configured with a price per weight, selecting it on the :guilabel:`PoS screen` opens diff --git a/content/applications/sales/point_of_sale.rst b/content/applications/sales/point_of_sale.rst index 79162e3ad9..49b6e92312 100644 --- a/content/applications/sales/point_of_sale.rst +++ b/content/applications/sales/point_of_sale.rst @@ -209,6 +209,7 @@ To get an overview of all orders, regardless of the session, click the vertical :titlesonly: point_of_sale/configuration + point_of_sale/pos_hardware point_of_sale/employee_login point_of_sale/receipts_invoices point_of_sale/preparation diff --git a/content/applications/sales/point_of_sale/pos_hardware.rst b/content/applications/sales/point_of_sale/pos_hardware.rst new file mode 100644 index 0000000000..bb8e650dfc --- /dev/null +++ b/content/applications/sales/point_of_sale/pos_hardware.rst @@ -0,0 +1,108 @@ +======== +Hardware +======== + +Odoo Point of Sale supports integration with a variety of hardware, including :doc:`payment +terminals ` and cash drawers, as well as :doc:`customer displays +`, :ref:`scales `, :doc:`barcode scanners `, +:doc:`ePOS printers `, and in-store :doc:`electronic shelf labels +`. + +.. _pos/scale: + +Scale +===== + +.. important:: + In EU member states, `certification is legally required + `_ + to use a scale as an integrated device. + +Prerequisite +------------ + +Connecting a scale requires the use of an **IoT System**. + +.. seealso:: + - :doc:`../../general/iot/connect` + - :doc:`../../general/iot/devices/scale` + +Configuration +------------- + +Scale connection +~~~~~~~~~~~~~~~~ + +#. :ref:`Access the POS settings ` and select the POS, or click the + :icon:`fa-ellipsis-v` (:guilabel:`vertical ellipsis`) icon on a POS card and click + :guilabel:`Edit`. +#. Scroll down to the :guilabel:`Connected Devices` section and enable :guilabel:`IoT Box`. +#. Select the scale in the :guilabel:`Electronic Scale` field. +#. Click :guilabel:`Save`. + +Product configuration +~~~~~~~~~~~~~~~~~~~~~ + +#. Go to :menuselection:`Inventory --> Configuration --> Settings`. +#. Scroll down to the :guilabel:`Products` section and activate :guilabel:`Units of Measure`. +#. Go to :menuselection:`Point of Sale --> Products --> Products`. +#. Select a product to weigh. +#. Ensure the :guilabel:`Point of Sale` checkbox is activated for the product to be available in + POS. +#. Go to the :guilabel:`Point of Sale` tab and activate :guilabel:`To Weigh With Scale`. This + enables the product to be weighed directly on the connected scale at the POS. +#. Return to the :guilabel:`General Information` tab and set a :guilabel:`Sales Price` per + :guilabel:`kg`. + +.. important:: + The selected unit of measure for weighable products must be :guilabel:`kg` to ensure compliance + with **European regulations**. + +.. seealso:: + :doc:`../../inventory_and_mrp/inventory/product_management/configure/uom` + +European regulations +-------------------- + +As scales used in commercial transactions are certified, Odoo must adhere to specific European +requirements. If the database does not meet these European regulations, a distinct +:icon:`fa-balance-scale` (:guilabel:`red scale`) icon displays prominently in red. + +Click this red icon opens to modal window that explains the reasons for non-compliance. To +automatically implement the necessary changes to the Odoo settings and achieve compliance, click +:guilabel:`Apply changes`. Once the database meets regulatory requirements, the +:icon:`fa-balance-scale` (:guilabel:`scale`) icon turns green, indicating full compliance. + +.. image:: pos_hardware/legal-requirements.png + :scale: 75 % + +.. note:: + .. raw:: html + + Once the database complies with the European regulation, + + + +Additional guidelines +~~~~~~~~~~~~~~~~~~~~~ + +:doc:`The customer display ` and POS display must each be at least 6 inches. +However, we recommend using a larger screen for better end-user readability. + +Usage guideline +--------------- + +#. :ref:`Open a POS session `. +#. Select the product to weigh on the POS interface or scan its barcode, which opens a modal window. +#. Place the product on the scale and wait for the weight to be displayed. +#. Once the weight is determined, the price is automatically computed. +#. Click :guilabel:`Order` :icon:`fa-angle-double-right` to add the product to the cart. +#. Remove the previous product to weigh a second item. + +.. image:: pos_hardware/weigh.png + :alt: weighing window + :scale: 85 % + +.. important:: + Make sure the scale returns to `zero` before weighing a new product. If it does not, the + :guilabel:`Order` :icon:`fa-angle-double-right` button remains unclickable until it is reset. diff --git a/content/applications/sales/point_of_sale/pos_hardware/legal-requirements.png b/content/applications/sales/point_of_sale/pos_hardware/legal-requirements.png new file mode 100644 index 0000000000000000000000000000000000000000..c45c9e4d1fea49b7757d5dad868817cfc9f4dabb GIT binary patch literal 16053 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 tLpXgQDq4PVwvN2E-bCFw|4+}XQ8TNn)x;9 zje_nUpV86CbURnS%`M`={$XfTVq0hL((+FwP2=IQ$uv}fZ*bK7!gBZYTt-HQgL?pB zeN$XcyAuCBFcblgNp|)ME~~6-YVEXf_B}m0otmD5!C=S7C))3=i_2<;MkZ1+FlT3H zN)RJ?z$hd#VQ_G;2wN2#j;yF|fCWUfcJwBs<;bZSzB6%%Nyr!-pCS^rK3cl&?(Po^ zjg3vrCX7DmxSUr*b1R zLu%S8=YJ~Ye#7GMNxrf5-&>=cLJ;oo_O8B>&cU`7LRwlHtZ6tq4_jDTRX8>m?-eyM zIa6Oy%`5zt<_WvGjjNijSypIDkSVOAtAB2EX1sT#Z*1JLt}iDiM=}G?n^akaE-Onb zVu{60&(8NXc41QrHh&*&93F*)BQgi4i>8*c#^z;FbezfvqDU?V}AV>nxn2Trnm29sM2M{Yx_o*x40EHo>-uY4!ZZmgygH-@6Bz zdz{_IJ~OewHmymb*ACA{P+)RD31;I+AB9?8EUi@z;S~p|eClg0?8s!Jxs`3Z&6D zsOR|QE@`vZ9h1caB#Nx46WTzq*6#=zDP-wkG&v1 zLxnx~J5`q%dmia`nX&&liBj|?FEK0>AFsAidr16mN3LDId=vFo1$?Rhr2@N9HoV)j zEj>Mi4RFKK-}n7kZ?m2)it=d5)itEe8zQlf@O^99om3=n3cJf6G3Ds$)T*t&$*C~j zU^rC|WH=RqF&^^XKPogwO{)7Un5S#f45DnI8IB9)f|@GcEir(gKLi@`3T=^V=IZas zQ4f_hnOSe0aUa<91p8o^4oV%iA@aDdf_*<}?y3OBF{W(E)r>D|Aq}q;HO)iw4?Lv1 z`-V)NJq6wOk%UZM!Y-49BYeLj4|`>!MmKh_3_Nq}uB_1Gh*cYZSCNI4veb}#wsK7& zLOZtYkx4O82|KOZe07}mj1=KnrT1+nJqmZ4wh0w7-uHm0^S?MI}mKa`6|Pc5x@w9v96xDC|_`-a9kPvS@;QSebB0Y-Uai z#i;hnffLRSUMLYscV-33vL7L0Dn0eHD-9uOS)5N85vtN$}+d2_eF zvTybflEiTp4&3+PEz^Zr9Yln7^al^Kqpf5UA!Y6;afqnbSaY*m-sHnbZx7j`v^4aG zoT2LA*`XSjOu<}5M92&6JoaN+l^ATeoN8kEgekm|SPOl?l@$)nD$WJhn`xWU7Jh{H zH|xeuo?HWZ7-=$WgzJG3{}HicNgGzh#cL?Ed`zbhRPn}ATNO_=z(vO1K!M(yzP}mxiZ>+W$1x)LnK-9QR9`9|=oSA>105%uFXX{|7`1-AM<9kI#oE&D zqCx%Y>gVE0`*;R{!*&@)3H@kQCS&A#EjBxm&|E$?TqgJ8D3?Tw0)HT5U@a4FO^uVCl-_}#I(zBVwAWRTp&H4tj)?C|J!dk(kEnxf_Wc}2QEo=Q zDF$w)I_G?e7fWv^-gBnSH6Si$gIrc6^@wS(S@glwbj( zV#S9( z7t@Ahft9viLO<#<7WlOQs7@<9$=-G@#j9iP`M$=ZbzI{}nCA%w4u>y#$%w)D?xGd^ z4u;I`Ffi@v!7N}0Fl+Bh7XjA7)|lfdy|#<99m~xA?e#iW@d};#I@oIam}wj#n%$Fs zHnA?2JinERVV}pg1|LEM`zf!@d08F({Iou^cpCQ=9kj$|FR)&K-qYdd`U5ity>RaS zQ2o7u_UiIja}ZJ>rCg_I7r%l~08!r6ohU;Lnv7Hhv|;LMweHn&D-iR_zLT9kMLpv} z_vP8&l0RF+i{={uXn3wEcOm7iI$HzGo9csj>!}Tt6O^Be0)sC)yl^Z12oNmK-zpT= z7#Uzpt0Oh5j9mbc!bix@!)6u|hX<%(4T)n;?V&V?n7f3EWwc{wrsBIJMwg#eME(@-vZ>P@L`H;#vX@KD z3SshF=kd>K zZ)~L{zU9v$rg=O*e9^n6gzs~e9?THekP&;+jdl*b<+H z3U9O&mBa{Uj8yx>4gAzI22HCm(ldu!^yDBX6|qhDY&Bgt3)<#7Caqel|D6Ka{)UZR zM2mKQZh_}al_+J9l_M)+e5h5e~A2%@6OqFAu`)XS;m z=@xVGIY7n-CW`??xra|42Oa5J22JHX6~DG*WRSk+ChJ~cPvGAu<)XwfO@OZTwhMsx z0e+Dxu@rpaKgoJg@sg}<|3TJ#S~7C}qZeha#8>M2?oYlweBJfkzV!~Zv5bzS;=SeP zG6h-iAX1KyA9)xCTRZia3;FNgwbYPy-nZAM(e8TtHCLvfg8k10UTC;aF7DA>#rD~k zidLH>@q-BKgJjXe-f2;3M8TbiDWYJM=wWK;^WFK>T|BZ|__*aY0#J$Phszg+?tY;} z^SplTu-dD{`5URFTAtOS;9J`T^Y^=u!D2u!#$3qHp03HQIeCM-#~o8exR%$1MG`T1 zi`UrlrZrN^ku!8_q|6^nbmVxZKdj23askzd4}50`p!YBTOmE$r6F7j6X4teBQ3X+l zu=8fb0m~6p`&*Hyv$7OMaLYY`++)kDnCDi>`(iBnF#kU_`%lP9PHW8Xi*B4Jp;Wql z9dsJwiP2tpkq(^&_8Vj>#uuYE0cPcw66F;#T(WYUnN1xpL}r7Tqr9<>S3x~)89dae z+0_PvHSb|Ql^zOnzo#yYW>ivQ*URb#qnIGimy>lDuVTcfq)w}cUr?r-479PKOf8j+ z3i9H!)~K>Fu#Q!bR}ZaY7HC@TE#xy}C>WIEn~K;U4oGwcm%y7;D=%H3E?s~|6U-x` zG^}#>7Dy*)NHJd6KGD<*ILE|_w8^RtYC)58|KU8Z7(S--0Iwl^eTRabKE7VM@y_)o z1_z~$%@lsiWZ94)Ea@-m$82UoT5EgEx0WT+@rRx-{5yLoJQ^ZX^Wvayv$vlk!%F7J zjBRPV)Lw7OH8+0+R1*1BV%hc?YBRwjyPd~(tzLBF1V}`YO81K{dQNDJH}5_58qDa#qyelm#L@%j92ZEh8{}yrop(OqxE}J7XD^BF5-k78dH>5}Uc+}fKn1+yXH|d86#=l~uEGy) zCGmsZs%HlI9k@Q&}Zm&vyk6G=LRZ-M|{druQhHDmpbn zX*1#kCU|a4?Vo=33i>HMC}PnYQ{%cU$u8H>F!@bTJ8pM8?bpJ$o&1hDS5HhXB$`X% z>%*nzg`XeBKWh^yoqrM6S6+|c;49%MO%*g$T|km|#r5?YFen!gIWYLc@YWSAxFLV) zQWAl^gTs)0D$xdFXkG;C-$b9+eo|Vw7dZS0tLnw?|KPVNYjsCG{IKMtSB=ub)tEuv z0Xw|B6y)yXEarus{QYX~(PQq?tDwiox!-GpXu5j!79n(G=bcin$+et)9N+GURBuYz zNzrTLni&d-9!TJ@9cSeRj^EN)slr9W6P%JOSjjK~nPCO{~T3F0BKKi!G6nP(<$Zv&iLzDoM5w24R`VMC&ht07$c;coXeY7A%x9n%j57RH_d znr~e>f>&7^T0iV+04xv)KDP~Eb?RGmDf5AL%+Kplm+p9f@C@HvC{>>dw9+4PR1Ug(* z1s~I}@pD_cN9dqMKrz~*FJ<*gkz4~6+Cm{;a0cfbnMRe`SenW+v&p#ouSNF6Ij}Kyp_{#){79)?_vuwU8E5gOZjml6@;=#eeJ+{ zV}yQRI3fR2f>9m!qx6&))C+4Np^A#2rPr6D&?f{Lc%kBNb z(rre85Be)N4A^WO^3U;yi|Og4Bl7$7AtQ%8R(A4@SZ^OX*@CfY4@%C4^A!T)GEj7S z{84+tE1XNAN?=MqZ-P}UEceH?D={Aq@yPIw!>#jAR*+;m2>$R}Xm$*8go%c!C=a}r zQDA>6)vrU>b!@{}M*HGgJKb(zRKejWJ_Nl02~U=abTIrLoF^;8&La`VY}5FHcc?@ zl`YdOM~Nt((TRv*SN`y@;aUAcvy}$r#PAld!X^r;WHUhD5EdJMS?RJ@d5n~ancp-t z*JXgLEfz+2PZ5b4EKp&s0gFwwthkUyjIN?rW3Z)RSwHAJdi)xXw~NT*+*4Be5we0i zbq1BaAXJUw|BGG26y1$8`hE$Uc*PQ^Oyw=D_isf0fuENHp8ww0U2XwiA>1g>t7HG? zTn80{-U-pFp-({~WZkV}I@#NjMmj)!mN5{DS&WLRLK3Qf-`SVEL>X{PtC9R$wETsx ze@)?lNQZ?Uqt30^wu2kmERuQoCXVLwO;R;^cL04c(4NM@K9vUU{#Xceny4V%-)S8^lxN~ z25esUi1XbuDQ4qVpplhoG>!`(Hec7X8R{@;W2}_SleToC$l!il%t3G7#)N4s2Z^;k zMZK&4Qme)i#}G+K-*{h_il!A~^AjsK&_HN3$84YvQo@@2~rdh_Q| zUx|ZO?d~Ko?yE!%t83(>t%#xPtIb!f7`Sq1hpW$=<*m9C1$tW294q19*NV@$s8Rad z4JjpaDg<+4W=&|lsM?9MQ?HVd1i_WFLd8aoiPPI7c}_K@BddH*J^{!Jr13Mm9q|K} zM}^(#4tDX^PT9Moj?>FM@eP zLlu2TE6YDp2un-ln`OIvM0$~LDx1f^q!8UTzX`X08Ny1@?>CUKkdVk?hCM?%wwEuj PRY>GzRb+~!-uwL