In sandbox it’s likely mocked PAD transactions go into PAID or COMPLETED status right away.
In production PAD invoices are set to APPROVED and make it into PAID or COMPLETED after the funds have been successfully withdrawn from the client’s account. The payment_date (should be able to see this in the API) will get populated then. We typically still provide the product for PAD when it’s APPROVED as the client has agreed to our PAD agreement and we lock their account if they end up being NSF.
If the client has gone into NSF, we typically move the invoice_status_code into SETTLEMENT_SCHED for PAD only.