После окончания проекта Вам нужно зафиксировать текущее состояние проекта, т.е подписать документ приема-сдачи. Если проект будет развиваться дальше (Вашими силами или силами заказчика), то тут нужно сделать документ, в котором прописать все соглашения по проекту. Также в этом документе стоит описать гарантийные и не гарантийные случаи, а также случаи, когда вы отказываетесь от поддержки данного проекта (например, заказчик внес в проект что-то, что не было заложено в архитектуре, и тем самым может нарушить функционирование программы).
По поводу багов обычно практика такова: перед сдачей проекта, заказчику необходимо предоставить набор успешно пройденных функциональных тестов (и вообще замечательный вариант, если эти тесты гоняются ежедневно и есть отчетность по данным тестам (какие прошли, какие нет и почему)). Если заказчик найдет баг (а обычно так и происходит), тут главное найти причину данного бага, т.е. возможно, что какой то криворукий пользователе запустил приложение не так, или не с тем набором параметров или другое. Если вина на стороне заказчика (допустим не так запустил приложение), то это не считается багом и можно просто дать рекомендации о том, как запускать приложение.
Если же неправильно реализована логика для частных случае, то тут явный баг. Обычно для таких целей составляют смету о том, сколько уйдет времени на исправление данного бага (обычно человеко-часы). И дальше идет согласование. После согласования вы получаете количество согласованного времени и оплату.