Od pomysłu do serwisu

Rozrysujmy dwa przykłady kredytów. Jeden to kredyt ratalny na zakup pralki o wartości 2000 zł, gdzie przy zakupie płaci się 200 zł, a reszta rozłożona jest na 6 równych rat po 384 zł, spłacanych co dwa miesiące (patrz rys. 2).

Od pomysłu do serwisu

Rys.2

Drugi przykład to kredyt konsumpcyjny, z nominalnym oprocentowaniem 29,9% i prowizją 3,5%, w wysokości 1000 zł zaciągnięty na cztery miesiące, gdzie do 5 dnia każdego miesiąca następuje spłata wszystkich odsetek i równej raty kapitałowej od bieżącego zadłużenia. Za każdy miesiąc kalendarzowy naliczane są odsetki w wysokości 1/12 oprocentowania rocznego, niezależnie od rzeczywistej liczby dni między spłatami (patrz rys. 3).

Narzędzia

Od pomysłu do serwisu

Rys.3

Czas na decyzję o wyborze narzędzia. Problem jest prosty, więc i narzędzie powinno być możliwie proste. Jednym z najprostszych kompilatorów dostępnych na rynku jest Microsoft Visual Basic 6.0. Jego zaletą jest też dostępność towarzyszących technologii internetowych, które pozwolą nam później stworzyć serwis internetowy, obliczający efektywne oprocentowanie kredytów.

Wybór języka programowania od razu każe nam zadać pytania o typy ze standardowej biblioteki, którymi posłużymy się w celu odwzorowania typów abstrakcyjnych założonych w projekcie (Integer, Float, Date, Money). Każe nam także zadać pytanie, czy istnieje klasa pozwalająca odwzorować listę spłat, czy musimy napisać ją samodzielnie. Na szczęście, w standardowej bibliotece Visual Basica istnieje klasa Collection, którą można posłużyć się do odwzo- rowania listy. Jedyne, co będziemy musieli oprogramować samodzielnie, to umieszczanie nowo dodanego elementu w odpowiednim miejscu na liście, w zależności od daty spłaty. Nawiasem mówiąc, algorytm obliczania RRSO pochodzący z ustawy nie narzuca kolejności rat (wszak dodawanie jest przemienne), ale zakładamy, że chronologiczne umieszczenie spłat w modelu pozwoli na ich przejrzyste zaprezentowanie na stronie internetowej.

Komponent powinien powstać jako ActiveX DLL, czyli komponent COM, działający wewnątrz procesu. To pozwoli na zapewnienie skalowalności i bezpieczeństwa aplikacji internetowej. Obszerne wyjaśnienie, dlaczego ten właśnie typ komponentu jest właściwy dla aplikacji internetowej, można znaleźć w opisie architektury DNA w źródłach Microsoftu.

Z zadaną dokładnością

Kluczowym zadaniem komponentu jest obliczanie efektywnej rocznej stopy oprocentowania. Odbywa się to przez stawianie kolejnych hipotez dotyczących stopy i wyliczanie wartości sumy na podstawie tej stopy (prawa strona wzoru z ustawy o kredycie konsumenckim) i porównywanie jej z wielkością kredytu (prawa strona równania). Zauważmy, że oznacza to, iż będziemy potrzebowali metody wyliczenia prawej strony równania (sumy rat) przy zadanej realnej stopie rocznej w klasie "CKredyt".

Ze względu na to, że mamy do czynienia z liczbami zmiennoprzecinkowymi, nie sposób dokonać dokładnego porównania między wartością wyliczonej sumy a kwotą kredytu. Należy założyć pewną skończoną dokładność wyliczenia RRSO. Oczywiście, im dokładniej, tym lepiej, trzeba jednak mieć świadomość, że każde dodatkowe miejsce po przecinku to kilka dodatkowych iteracji obliczeń. Testy dowiodły, że dokładność 0.001 (dziesiąta część procenta) pozwala zachować rozsądną równowagę między dokładnością a wydajnością.


TOP 200