This is the role of the invoice method to decide when a sale line must be invoiced. It is not difficult to say that a service must be invoiced once a shipment has been done.
For shipment cost it is better to use sale_shipment_cost
because the invoicing of the cost is done automatically when the shipments are done.
Indeed it is if you need to track that the service has been actually delivered.