As with most derivatives that have early exercise, you are going to want to price this using a grid scheme. I have priced callable loans with floors using the Generalized Vasicek model at my old hedge fund, and it is fairly easy to handle. As a matter of fact my students are doing that very problem as homework this week, and my reference implementation using explicit finite differences is 15 lines of Python/Numpy. (Sorry, guys, I am not going to post it here).
Allow me to make the following suggestions:
- Do not ignore credit spread. Instead, consider modeling (credit spread + interest rate) as your basic Vasicek "short rate" variable $r$. Credit spread provides about half the rate volatility in your typical security so ignoring it severely mis-estimates option value.
- Just do an explicit FD scheme unless you really need speed. It is actually easier than making a tree. If speed becomes a problem go to Crank-Nicolson.
- If you are really only interested in the incremental value of the floor to the bondholder, then you can make a darn good approximation even if you ignore the term structure of interest rates. That lets you revert to the straight Vasicek model which is super-simple to deal with.
- Use Neumann boundary conditions
As a reminder, to construct the Vasicek finite differencing scheme, you simply finite-difference the PDE in $\tau=T-t$
$$
\frac{\partial P}{\partial\tau} = \frac12 \sigma(\tau)^2 \frac{\partial^2 P}{\partial\tau^2} + \kappa(\theta(\tau)-r) \frac{\partial P}{\partial r} - rP
$$
and then apply your exercise conditions at each timestep. If you are willing to ignore term structures, then $\sigma$ and $\theta$ become constants. You can estimate the volatility historically, and fit the $\theta$ to market rates using the best fit to the risky zero rate curve and the expectation formula
$$
\widehat{E}\left[ \int_t^T r_s ds \right] = \frac{1-e^{-\kappa \tau}}{\kappa} r_t + \left( \tau-\frac{1-e^{-\kappa \tau}}{\kappa} \right) \theta
$$
By Neumann boundary conditions, I mean essentially assuming that at the upper and lower short-rate limits, you should pretend that the second derivative is zero. This is equivalent to setting $\sigma=0$ but only at those limits.