GET /v1/finances)에 있고 모든 플랜이 같이 씁니다.
플랜 항목은 앞으로 생기는 것과, 현재 재무에 대한 계획(팔기·재계약·금액 바꾸기)입니다.
고치는 순서
1
읽기
GET /v1/plans/{id} 로 플랜 전체를 받습니다. revision 은 지금 판의 지문입니다.2
미리 계산하기(선택)
POST /v1/plans/{id}/projection 에 바꿀 것만(remove·upsert·milestones) 보내면 저장하지 않고 전망을 계산합니다.3
저장하기
받은 본문을 고쳐
revision 과 함께 PUT /v1/plans/{id} 로 보냅니다. 그사이 다른 곳(화면·다른 사람·다른 토큰)에서 저장했으면 덮어쓰지 않고 412 입니다. 다시 읽고 고칩니다. PUT 은 전체를 바꿉니다. 빠뜨린 milestones·items 는 빈 목록, monteCarlo 는 기본값으로 저장됩니다.GET /v1/finances 응답의 ETag 를 PUT /v1/finances 의 If-Match 에 넣으면 그사이 바뀌었을 때 412 입니다(넣지 않으면 그냥 덮어씁니다).
시기 Time
항목의 시점(at)·시작(start)·끝(end)은 모두 셋 중 하나로 씁니다.
month: 그 달.age: 그 나이가 되는 생일 달(who가SPOUSE면 배우자 나이).milestone: 이정표 달 ±offset개월.- 시작·시점은 그 달부터입니다. 끝은 달이면 그 달까지, 나이·이정표면 그 전 달까지입니다(은퇴하면 그달부터 월급이 끊기는 것과 같습니다). 비우면 플랜 끝까지입니다.
- 이정표에 묶은 항목은 이정표를 옮기면 따라 움직입니다.
이정표
이정표는 계산이 달라지는 정해진 시점뿐이고, id 가 정해져 있습니다. 다른 id 는 400 입니다.
이정표의 시기는 달 또는 나이입니다(
{ "id": "retirement", "name": "은퇴", "time": { "age": 60 } }).
항목
모든 항목은id(플랜 안에서 겹치지 않게 직접 정함)·kind·name 과 종류별 필드를 가집니다. 금액은 원이고 월 금액은 monthlyAmount 입니다. 필드는 레퍼런스의 스키마에 있습니다.
change·holding·transfer는 현재 재무의 수입·지출·자산id를 가리킵니다.- 항목을 지우지 않고 계산에서만 빼려면 그
id를 플랜의off에 넣습니다. 끈 수입·자산을 가리키는change·transfer도 함께 빠집니다. - 저장할 때 400: id 가 겹칠 때, 없는 이정표·수입·지출·자산을 가리킬 때, 한 달도 없는 항목(끝이 시작보다 앞)일 때.
결과에서 항목 찾기
전망 응답의 이벤트 이름표는 항목 id 입니다. 한 항목에서 여러 일이 생기면"항목 id:부분" 으로 가립니다(예: home 을 사면 home, 팔면 home:sale, 재계약하면 home:renew). 그래서 응답의 숫자를 항목으로 거슬러 찾을 수 있습니다.