Impacted versions:
11.0

I don't know if it is an issue, but I think is strange.

`product_qty` is in unit of `product` : https://github.com/odoo/odoo/blob/11.0/addons/stock/models/stock_move.py#L240
`reserved_availability` is in unit of `stock.move` : https://github.com/odoo/odoo/blob/11.0/addons/stock/models/stock_move.py#L295

`move.product_qty - move.reserved_availability` seems to have no sens, no ?

https://github.com/odoo/odoo/blob/11.0/addons/stock/models/stock_move.py#L915
https://github.com/odoo/odoo/blob/11.0/addons/stock/models/stock_move.py#L917
https://github.com/odoo/odoo/blob/11.0/addons/stock/models/stock_move.py#L924

thank for your answer

@jco-odoo 
@alnslang 


addons/stock/models/stock_move.py
pass
    def _action_done(self):
        self.filtered(lambda move: move.state == 'draft')._action_confirm()  # 
        moves = self.filtered(lambda x: x.state not in ('done', 'cancel'))
        moves_todo = self.env['stock.move']
        # 
        # 
        for move in moves:
            if move.quantity_done <= 0:
                if float_compare(move.product_uom_qty, 0.0, precision_rounding=move.product_uom.rounding) == 0:
                    move._action_cancel()
        # 
        for move in moves:
            if move.state == 'cancel' or move.quantity_done <= 0:
                continue
            # 
            if not move.picking_id:
                moves_todo |= move
            moves_todo |= move._create_extra_move()
        # 
        for move in moves_todo:
            # 
            # 
            rounding = self.env['decimal.precision'].precision_get('Product Unit of Measure')
            if float_compare(move.quantity_done, move.product_uom_qty, precision_digits=rounding) < 0:
                #