@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix str: <http://www.w3.org/2000/10/swap/string#> .
@prefix time: <http://www.w3.org/2000/10/swap/time#> .

@prefix s: <http://www.w3.org/2000/01/rdf-schema#> .

@prefix qif: <http://www.w3.org/2000/10/swap/pim/qif#> .
@prefix qr: <qifReport@@#>.

qif:amount qr:formatLetter "T".
qif:payee qr:formatLetter "P". # payee name, really
qif:memo qr:formatLetter "M".
qif:number qr:formatLetter "N".

qif:Bank a qif:AccountType; s:label "Bank".
qif:Cash a qif:AccountType; s:label "Cash".
qif:CCard a qif:AccountType; s:label "CCard".
qif:Asset a qif:AccountType; s:label "Oth A".
qif:Liability a qif:AccountType; s:label "Oth L".

#### file header

{ ?ACCT a ?TY.
  ?TY a qif:AccountType; s:label ?L.
  ?LINE is str:concatenation of ("!Type:" ?L "\n")
 }
  => { "0.1" log:outputString ?LINE }.


#### draw line after each qif transactions
{
  ?E a qif:Transaction; qif:date ?YMD; log:rawUri  ?I.
  (?YMD ?I "zAfter") str:concatenation ?K
} => { ?K log:outputString "^\n" }.



# generic fields

{
  ?P qr:formatLetter ?L.

  ?E a qif:Transaction; qif:date ?YMD; log:rawUri  ?I;
    ?P ?V.

  (?YMD ?I ?L ".0") str:concatenation ?K0.
  (?YMD ?I ?L ".1") str:concatenation ?K1.
  (?YMD ?I ?L ".z") str:concatenation ?Kz.
}
 => {
 ?K0 log:outputString ?L.
 ?K1 log:outputString ?V. #@@ escaping?
 ?Kz log:outputString "\n".
 }.

# category field is kinda special

{
  ?E a qif:Transaction; qif:date ?YMD; log:rawUri  ?I;
    qif:from [ qif:catName ?N].

  (?YMD ?I "L" ".0") str:concatenation ?K0.
  (?YMD ?I "L" ".1") str:concatenation ?K1.
  (?YMD ?I "L" ".z") str:concatenation ?Kz.
}
 => {
 ?K0 log:outputString "L".
 ?K1 log:outputString ?N.
 ?Kz log:outputString "\n".
 }.

# date formatting
# qif:date "2002-10-31" -> D10/31'2002
# (data exported by quicken seems to actually look like D10/31'2)
{
  ?E a qif:Transaction; qif:date ?YMD; log:rawUri  ?I.
  ?YMD time:year ?YYYY; time:month ?MM; time:day ?DD.

  (?YMD ?I "D" ".0") str:concatenation ?K0.
  (?YMD ?I "D" ".1") str:concatenation ?K1.
  (?YMD ?I "D" ".z") str:concatenation ?Kz.
  ("%02d/%02d'%s" ?MM ?DD ?YYYY) str:format ?QDATE. 
}
 => {
 ?K0 log:outputString "D".
 ?K1 log:outputString ?QDATE.
 ?Kz log:outputString "\n".
 }.


