;update manuals
This commit is contained in:
		
							parent
							
								
									7cf7bcbf96
								
							
						
					
					
						commit
						895783ebe0
					
				| @ -75,7 +75,12 @@ T} | |||||||
| T{ | T{ | ||||||
| \f[B]\f[CB]date-format\f[B]\f[R] | \f[B]\f[CB]date-format\f[B]\f[R] | ||||||
| T}@T{ | T}@T{ | ||||||
| describe the format of CSV dates | how to parse dates in CSV records | ||||||
|  | T} | ||||||
|  | T{ | ||||||
|  | \f[B]\f[CB]decimal-mark\f[B]\f[R] | ||||||
|  | T}@T{ | ||||||
|  | the decimal mark used in CSV amounts, if ambiguous | ||||||
| T} | T} | ||||||
| T{ | T{ | ||||||
| \f[B]\f[CB]newest-first\f[B]\f[R] | \f[B]\f[CB]newest-first\f[B]\f[R] | ||||||
| @ -866,6 +871,27 @@ For the supported strptime syntax, see: | |||||||
| .P | .P | ||||||
| .PD | .PD | ||||||
| https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime | https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime | ||||||
|  | .SS \f[C]decimal-mark\f[R] | ||||||
|  | .IP | ||||||
|  | .nf | ||||||
|  | \f[C] | ||||||
|  | decimal-mark . | ||||||
|  | \f[R] | ||||||
|  | .fi | ||||||
|  | .PP | ||||||
|  | or: | ||||||
|  | .IP | ||||||
|  | .nf | ||||||
|  | \f[C] | ||||||
|  | decimal-mark , | ||||||
|  | \f[R] | ||||||
|  | .fi | ||||||
|  | .PP | ||||||
|  | hledger automatically accepts either period or comma as a decimal mark | ||||||
|  | when parsing numbers (cf Amounts). | ||||||
|  | However if any numbers in the CSV contain digit group marks, such as | ||||||
|  | thousand-separating commas, you should declare the decimal mark | ||||||
|  | explicitly with this rule, to avoid misparsed numbers. | ||||||
| .SS \f[C]newest-first\f[R] | .SS \f[C]newest-first\f[R] | ||||||
| .PP | .PP | ||||||
| hledger always sorts the generated transactions by date. | hledger always sorts the generated transactions by date. | ||||||
|  | |||||||
| @ -42,7 +42,9 @@ after the examples: | |||||||
| *'if' table*                    apply some rules to CSV records matched | *'if' table*                    apply some rules to CSV records matched | ||||||
|                                 by patterns, alternate syntax |                                 by patterns, alternate syntax | ||||||
| *'end'*                         skip the remaining CSV records | *'end'*                         skip the remaining CSV records | ||||||
| *'date-format'*                 describe the format of CSV dates | *'date-format'*                 how to parse dates in CSV records | ||||||
|  | *'decimal-mark'*                the decimal mark used in CSV amounts, | ||||||
|  |                                 if ambiguous | ||||||
| *'newest-first'*                disambiguate record order when there's | *'newest-first'*                disambiguate record order when there's | ||||||
|                                 only one date |                                 only one date | ||||||
| *'include'*                     inline another CSV rules file | *'include'*                     inline another CSV rules file | ||||||
| @ -387,6 +389,7 @@ Blank lines and lines beginning with '#' or ';' are ignored. | |||||||
| * if table:: | * if table:: | ||||||
| * end:: | * end:: | ||||||
| * date-format:: | * date-format:: | ||||||
|  | * decimal-mark:: | ||||||
| * newest-first:: | * newest-first:: | ||||||
| * include:: | * include:: | ||||||
| * balance-type:: | * balance-type:: | ||||||
| @ -787,7 +790,7 @@ if ,,,, | |||||||
|  end |  end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| File: hledger_csv.info,  Node: date-format,  Next: newest-first,  Prev: end,  Up: CSV RULES | File: hledger_csv.info,  Node: date-format,  Next: decimal-mark,  Prev: end,  Up: CSV RULES | ||||||
| 
 | 
 | ||||||
| 2.8 'date-format' | 2.8 'date-format' | ||||||
| ================= | ================= | ||||||
| @ -818,11 +821,29 @@ date-format %-m/%-d/%Y %l:%M %p some other junk | |||||||
| https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime | https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| File: hledger_csv.info,  Node: newest-first,  Next: include,  Prev: date-format,  Up: CSV RULES | File: hledger_csv.info,  Node: decimal-mark,  Next: newest-first,  Prev: date-format,  Up: CSV RULES | ||||||
| 
 | 
 | ||||||
| 2.9 'newest-first' | 2.9 'decimal-mark' | ||||||
| ================== | ================== | ||||||
| 
 | 
 | ||||||
|  | decimal-mark . | ||||||
|  | 
 | ||||||
|  |    or: | ||||||
|  | 
 | ||||||
|  | decimal-mark , | ||||||
|  | 
 | ||||||
|  |    hledger automatically accepts either period or comma as a decimal | ||||||
|  | mark when parsing numbers (cf Amounts).  However if any numbers in the | ||||||
|  | CSV contain digit group marks, such as thousand-separating commas, you | ||||||
|  | should declare the decimal mark explicitly with this rule, to avoid | ||||||
|  | misparsed numbers. | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | File: hledger_csv.info,  Node: newest-first,  Next: include,  Prev: decimal-mark,  Up: CSV RULES | ||||||
|  | 
 | ||||||
|  | 2.10 'newest-first' | ||||||
|  | =================== | ||||||
|  | 
 | ||||||
| hledger always sorts the generated transactions by date.  Transactions | hledger always sorts the generated transactions by date.  Transactions | ||||||
| on the same date should appear in the same order as their CSV records, | on the same date should appear in the same order as their CSV records, | ||||||
| as hledger can usually auto-detect whether the CSV's normal order is | as hledger can usually auto-detect whether the CSV's normal order is | ||||||
| @ -842,7 +863,7 @@ newest-first | |||||||
|  |  | ||||||
| File: hledger_csv.info,  Node: include,  Next: balance-type,  Prev: newest-first,  Up: CSV RULES | File: hledger_csv.info,  Node: include,  Next: balance-type,  Prev: newest-first,  Up: CSV RULES | ||||||
| 
 | 
 | ||||||
| 2.10 'include' | 2.11 'include' | ||||||
| ============== | ============== | ||||||
| 
 | 
 | ||||||
| include RULESFILE | include RULESFILE | ||||||
| @ -865,7 +886,7 @@ include categorisation.rules | |||||||
|  |  | ||||||
| File: hledger_csv.info,  Node: balance-type,  Prev: include,  Up: CSV RULES | File: hledger_csv.info,  Node: balance-type,  Prev: include,  Up: CSV RULES | ||||||
| 
 | 
 | ||||||
| 2.11 'balance-type' | 2.12 'balance-type' | ||||||
| =================== | =================== | ||||||
| 
 | 
 | ||||||
| Balance assertions generated by assigning to balanceN are of the simple | Balance assertions generated by assigning to balanceN are of the simple | ||||||
| @ -1171,84 +1192,86 @@ command the user specified. | |||||||
|  |  | ||||||
| Tag Table: | Tag Table: | ||||||
| Node: Top72 | Node: Top72 | ||||||
| Node: EXAMPLES2677 | Node: EXAMPLES2793 | ||||||
| Ref: #examples2783 | Ref: #examples2899 | ||||||
| Node: Basic2991 | Node: Basic3107 | ||||||
| Ref: #basic3091 | Ref: #basic3207 | ||||||
| Node: Bank of Ireland3633 | Node: Bank of Ireland3749 | ||||||
| Ref: #bank-of-ireland3768 | Ref: #bank-of-ireland3884 | ||||||
| Node: Amazon5230 | Node: Amazon5346 | ||||||
| Ref: #amazon5348 | Ref: #amazon5464 | ||||||
| Node: Paypal7067 | Node: Paypal7183 | ||||||
| Ref: #paypal7161 | Ref: #paypal7277 | ||||||
| Node: CSV RULES14805 | Node: CSV RULES14921 | ||||||
| Ref: #csv-rules14914 | Ref: #csv-rules15030 | ||||||
| Node: skip15209 | Node: skip15342 | ||||||
| Ref: #skip15302 | Ref: #skip15435 | ||||||
| Node: fields15677 | Node: fields15810 | ||||||
| Ref: #fields15799 | Ref: #fields15932 | ||||||
| Node: Transaction field names16964 | Node: Transaction field names17097 | ||||||
| Ref: #transaction-field-names17124 | Ref: #transaction-field-names17257 | ||||||
| Node: Posting field names17235 | Node: Posting field names17368 | ||||||
| Ref: #posting-field-names17387 | Ref: #posting-field-names17520 | ||||||
| Node: account17457 | Node: account17590 | ||||||
| Ref: #account17573 | Ref: #account17706 | ||||||
| Node: amount18110 | Node: amount18243 | ||||||
| Ref: #amount18241 | Ref: #amount18374 | ||||||
| Node: currency19348 | Node: currency19481 | ||||||
| Ref: #currency19483 | Ref: #currency19616 | ||||||
| Node: balance19689 | Node: balance19822 | ||||||
| Ref: #balance19823 | Ref: #balance19956 | ||||||
| Node: comment20140 | Node: comment20273 | ||||||
| Ref: #comment20257 | Ref: #comment20390 | ||||||
| Node: field assignment20420 | Node: field assignment20553 | ||||||
| Ref: #field-assignment20563 | Ref: #field-assignment20696 | ||||||
| Node: separator21381 | Node: separator21514 | ||||||
| Ref: #separator21516 | Ref: #separator21649 | ||||||
| Node: if block22056 | Node: if block22189 | ||||||
| Ref: #if-block22181 | Ref: #if-block22314 | ||||||
| Node: Matching the whole record22582 | Node: Matching the whole record22715 | ||||||
| Ref: #matching-the-whole-record22757 | Ref: #matching-the-whole-record22890 | ||||||
| Node: Matching individual fields23561 | Node: Matching individual fields23694 | ||||||
| Ref: #matching-individual-fields23765 | Ref: #matching-individual-fields23898 | ||||||
| Node: Combining matchers23989 | Node: Combining matchers24122 | ||||||
| Ref: #combining-matchers24185 | Ref: #combining-matchers24318 | ||||||
| Node: Rules applied on successful match24498 | Node: Rules applied on successful match24631 | ||||||
| Ref: #rules-applied-on-successful-match24689 | Ref: #rules-applied-on-successful-match24822 | ||||||
| Node: if table25343 | Node: if table25476 | ||||||
| Ref: #if-table25462 | Ref: #if-table25595 | ||||||
| Node: end27200 | Node: end27333 | ||||||
| Ref: #end27312 | Ref: #end27445 | ||||||
| Node: date-format27536 | Node: date-format27669 | ||||||
| Ref: #date-format27668 | Ref: #date-format27801 | ||||||
| Node: newest-first28417 | Node: decimal-mark28550 | ||||||
| Ref: #newest-first28555 | Ref: #decimal-mark28693 | ||||||
| Node: include29238 | Node: newest-first29032 | ||||||
| Ref: #include29369 | Ref: #newest-first29173 | ||||||
| Node: balance-type29813 | Node: include29856 | ||||||
| Ref: #balance-type29933 | Ref: #include29987 | ||||||
| Node: TIPS30633 | Node: balance-type30431 | ||||||
| Ref: #tips30715 | Ref: #balance-type30551 | ||||||
| Node: Rapid feedback30971 | Node: TIPS31251 | ||||||
| Ref: #rapid-feedback31088 | Ref: #tips31333 | ||||||
| Node: Valid CSV31548 | Node: Rapid feedback31589 | ||||||
| Ref: #valid-csv31678 | Ref: #rapid-feedback31706 | ||||||
| Node: File Extension31870 | Node: Valid CSV32166 | ||||||
| Ref: #file-extension32022 | Ref: #valid-csv32296 | ||||||
| Node: Reading multiple CSV files32451 | Node: File Extension32488 | ||||||
| Ref: #reading-multiple-csv-files32636 | Ref: #file-extension32640 | ||||||
| Node: Valid transactions32877 | Node: Reading multiple CSV files33069 | ||||||
| Ref: #valid-transactions33055 | Ref: #reading-multiple-csv-files33254 | ||||||
| Node: Deduplicating importing33683 | Node: Valid transactions33495 | ||||||
| Ref: #deduplicating-importing33862 | Ref: #valid-transactions33673 | ||||||
| Node: Setting amounts34895 | Node: Deduplicating importing34301 | ||||||
| Ref: #setting-amounts35064 | Ref: #deduplicating-importing34480 | ||||||
| Node: Setting currency/commodity36051 | Node: Setting amounts35513 | ||||||
| Ref: #setting-currencycommodity36243 | Ref: #setting-amounts35682 | ||||||
| Node: Referencing other fields37417 | Node: Setting currency/commodity36669 | ||||||
| Ref: #referencing-other-fields37617 | Ref: #setting-currencycommodity36861 | ||||||
| Node: How CSV rules are evaluated38514 | Node: Referencing other fields38035 | ||||||
| Ref: #how-csv-rules-are-evaluated38687 | Ref: #referencing-other-fields38235 | ||||||
|  | Node: How CSV rules are evaluated39132 | ||||||
|  | Ref: #how-csv-rules-are-evaluated39305 | ||||||
|  |  | ||||||
| End Tag Table | End Tag Table | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -39,26 +39,28 @@ DESCRIPTION | |||||||
|        if table                         apply  some rules to CSV records matched |        if table                         apply  some rules to CSV records matched | ||||||
|                                         by patterns, alternate syntax |                                         by patterns, alternate syntax | ||||||
|        end                              skip the remaining CSV records |        end                              skip the remaining CSV records | ||||||
|        date-format                      describe the format of CSV dates |        date-format                      how to parse dates in CSV records | ||||||
|        newest-first                     disambiguate record order  when  there's |        decimal-mark                     the decimal mark used in CSV amounts, if | ||||||
|  |                                         ambiguous | ||||||
|  |        newest-first                     disambiguate  record  order when there's | ||||||
|                                         only one date |                                         only one date | ||||||
|        include                          inline another CSV rules file |        include                          inline another CSV rules file | ||||||
|        balance-type                     choose which type of balance assignments |        balance-type                     choose which type of balance assignments | ||||||
|                                         to use |                                         to use | ||||||
| 
 | 
 | ||||||
|        Note, for best error messages when reading CSV files, use a .csv,  .tsv |        Note,  for best error messages when reading CSV files, use a .csv, .tsv | ||||||
|        or .ssv file extension or file prefix - see File Extension below. |        or .ssv file extension or file prefix - see File Extension below. | ||||||
| 
 | 
 | ||||||
|        There's an introductory Convert CSV files tutorial on hledger.org. |        There's an introductory Convert CSV files tutorial on hledger.org. | ||||||
| 
 | 
 | ||||||
| EXAMPLES | EXAMPLES | ||||||
|        Here  are  some sample hledger CSV rules files.  See also the full col- |        Here are some sample hledger CSV rules files.  See also the  full  col- | ||||||
|        lection at: |        lection at: | ||||||
|        https://github.com/simonmichael/hledger/tree/master/examples/csv |        https://github.com/simonmichael/hledger/tree/master/examples/csv | ||||||
| 
 | 
 | ||||||
|    Basic |    Basic | ||||||
|        At minimum, the rules file must identify the date  and  amount  fields, |        At  minimum,  the  rules file must identify the date and amount fields, | ||||||
|        and  often  it also specifies the date format and how many header lines |        and often it also specifies the date format and how many  header  lines | ||||||
|        there are.  Here's a simple CSV file and a rules file for it: |        there are.  Here's a simple CSV file and a rules file for it: | ||||||
| 
 | 
 | ||||||
|               Date, Description, Id, Amount |               Date, Description, Id, Amount | ||||||
| @ -77,8 +79,8 @@ EXAMPLES | |||||||
|        Default account names are chosen, since we didn't set them. |        Default account names are chosen, since we didn't set them. | ||||||
| 
 | 
 | ||||||
|    Bank of Ireland |    Bank of Ireland | ||||||
|        Here's a CSV with two amount fields (Debit and Credit), and  a  balance |        Here's  a  CSV with two amount fields (Debit and Credit), and a balance | ||||||
|        field,  which we can use to add balance assertions, which is not neces- |        field, which we can use to add balance assertions, which is not  neces- | ||||||
|        sary but provides extra error checking: |        sary but provides extra error checking: | ||||||
| 
 | 
 | ||||||
|               Date,Details,Debit,Credit,Balance |               Date,Details,Debit,Credit,Balance | ||||||
| @ -120,13 +122,13 @@ EXAMPLES | |||||||
|                   assets:bank:boi:checking         EUR-5.0 = EUR126.0 |                   assets:bank:boi:checking         EUR-5.0 = EUR126.0 | ||||||
|                   expenses:unknown                  EUR5.0 |                   expenses:unknown                  EUR5.0 | ||||||
| 
 | 
 | ||||||
|        The balance assertions don't raise an error above, because we're  read- |        The  balance assertions don't raise an error above, because we're read- | ||||||
|        ing  directly  from  CSV, but they will be checked if these entries are |        ing directly from CSV, but they will be checked if  these  entries  are | ||||||
|        imported into a journal file. |        imported into a journal file. | ||||||
| 
 | 
 | ||||||
|    Amazon |    Amazon | ||||||
|        Here we convert amazon.com order history, and use an if block to gener- |        Here we convert amazon.com order history, and use an if block to gener- | ||||||
|        ate  a third posting if there's a fee.  (In practice you'd probably get |        ate a third posting if there's a fee.  (In practice you'd probably  get | ||||||
|        this data from your bank instead, but it's an example.) |        this data from your bank instead, but it's an example.) | ||||||
| 
 | 
 | ||||||
|               "Date","Type","To/From","Name","Status","Amount","Fees","Transaction ID" |               "Date","Type","To/From","Name","Status","Amount","Fees","Transaction ID" | ||||||
| @ -178,7 +180,7 @@ EXAMPLES | |||||||
|                   expenses:fees           $1.00 |                   expenses:fees           $1.00 | ||||||
| 
 | 
 | ||||||
|    Paypal |    Paypal | ||||||
|        Here's a real-world rules file for (customised) Paypal CSV,  with  some |        Here's  a  real-world rules file for (customised) Paypal CSV, with some | ||||||
|        Paypal-specific rules, and a second rules file included: |        Paypal-specific rules, and a second rules file included: | ||||||
| 
 | 
 | ||||||
|               "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Item Title","Item ID","Reference Txn ID","Receipt ID","Balance","Note" |               "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Item Title","Item ID","Reference Txn ID","Receipt ID","Balance","Note" | ||||||
| @ -333,9 +335,9 @@ CSV RULES | |||||||
|    skip |    skip | ||||||
|               skip N |               skip N | ||||||
| 
 | 
 | ||||||
|        The word "skip" followed by a number (or no number,  meaning  1)  tells |        The  word  "skip"  followed by a number (or no number, meaning 1) tells | ||||||
|        hledger  to  ignore  this  many non-empty lines preceding the CSV data. |        hledger to ignore this many non-empty lines  preceding  the  CSV  data. | ||||||
|        (Empty/blank lines are skipped automatically.) You'll need  this  when- |        (Empty/blank  lines  are skipped automatically.) You'll need this when- | ||||||
|        ever your CSV data contains header lines. |        ever your CSV data contains header lines. | ||||||
| 
 | 
 | ||||||
|        It also has a second purpose: it can be used inside if blocks to ignore |        It also has a second purpose: it can be used inside if blocks to ignore | ||||||
| @ -344,27 +346,27 @@ CSV RULES | |||||||
|    fields |    fields | ||||||
|               fields FIELDNAME1, FIELDNAME2, ... |               fields FIELDNAME1, FIELDNAME2, ... | ||||||
| 
 | 
 | ||||||
|        A fields list (the word  "fields"  followed  by  comma-separated  field |        A  fields  list  (the  word  "fields" followed by comma-separated field | ||||||
|        names)  is  the quick way to assign CSV field values to hledger fields. |        names) is the quick way to assign CSV field values to  hledger  fields. | ||||||
|        It does two things: |        It does two things: | ||||||
| 
 | 
 | ||||||
|        1. it names the CSV fields.  This is optional, but  can  be  convenient |        1. it  names  the  CSV fields.  This is optional, but can be convenient | ||||||
|           later for interpolating them. |           later for interpolating them. | ||||||
| 
 | 
 | ||||||
|        2. when you use a standard hledger field name, it assigns the CSV value |        2. when you use a standard hledger field name, it assigns the CSV value | ||||||
|           to that part of the hledger transaction. |           to that part of the hledger transaction. | ||||||
| 
 | 
 | ||||||
|        Here's an example that says "use the 1st, 2nd and  4th  fields  as  the |        Here's  an  example  that  says "use the 1st, 2nd and 4th fields as the | ||||||
|        transaction's  date,  description  and amount; name the last two fields |        transaction's date, description and amount; name the  last  two  fields | ||||||
|        for later reference; and ignore the others": |        for later reference; and ignore the others": | ||||||
| 
 | 
 | ||||||
|               fields date, description, , amount, , , somefield, anotherfield |               fields date, description, , amount, , , somefield, anotherfield | ||||||
| 
 | 
 | ||||||
|        Field names may not contain whitespace.  Fields you  don't  care  about |        Field  names  may  not contain whitespace.  Fields you don't care about | ||||||
|        can  be  left  unnamed.  Currently there must be least two items (there |        can be left unnamed.  Currently there must be least  two  items  (there | ||||||
|        must be at least one comma). |        must be at least one comma). | ||||||
| 
 | 
 | ||||||
|        Note, always use comma in the fields list, even if your  CSV  uses  an- |        Note,  always  use  comma in the fields list, even if your CSV uses an- | ||||||
|        other separator character. |        other separator character. | ||||||
| 
 | 
 | ||||||
|        Here are the standard hledger field/pseudo-field names.  For more about |        Here are the standard hledger field/pseudo-field names.  For more about | ||||||
| @ -377,52 +379,52 @@ CSV RULES | |||||||
| 
 | 
 | ||||||
|    Posting field names |    Posting field names | ||||||
|    account |    account | ||||||
|        accountN, where N is 1 to 99, causes a posting to  be  generated,  with |        accountN,  where  N  is 1 to 99, causes a posting to be generated, with | ||||||
|        that account name. |        that account name. | ||||||
| 
 | 
 | ||||||
|        Most  often  there are two postings, so you'll want to set account1 and |        Most often there are two postings, so you'll want to set  account1  and | ||||||
|        account2.  Typically account1 is associated with the CSV file,  and  is |        account2.   Typically  account1 is associated with the CSV file, and is | ||||||
|        set  once  with  a top-level assignment, while account2 is set based on |        set once with a top-level assignment, while account2 is  set  based  on | ||||||
|        each transaction's description, and in conditional blocks. |        each transaction's description, and in conditional blocks. | ||||||
| 
 | 
 | ||||||
|        If a posting's account name is left unset but its amount  is  set  (see |        If  a  posting's  account name is left unset but its amount is set (see | ||||||
|        below),  a default account name will be chosen (like "expenses:unknown" |        below), a default account name will be chosen (like  "expenses:unknown" | ||||||
|        or "income:unknown"). |        or "income:unknown"). | ||||||
| 
 | 
 | ||||||
|    amount |    amount | ||||||
|        amountN sets posting N's amount.  If the CSV uses separate  fields  for |        amountN  sets  posting N's amount.  If the CSV uses separate fields for | ||||||
|        inflows  and  outflows, you can use amountN-in and amountN-out instead. |        inflows and outflows, you can use amountN-in and  amountN-out  instead. | ||||||
|        By assigning to amount1, amount2, ...  etc.  you can generate  anywhere |        By  assigning to amount1, amount2, ...  etc.  you can generate anywhere | ||||||
|        from 0 to 99 postings. |        from 0 to 99 postings. | ||||||
| 
 | 
 | ||||||
|        There  is  also  an older, unnumbered form of these names, suitable for |        There is also an older, unnumbered form of these  names,  suitable  for | ||||||
|        2-posting transactions, which sets both posting 1's and (negated) post- |        2-posting transactions, which sets both posting 1's and (negated) post- | ||||||
|        ing  2's  amount:  amount,  or amount-in and amount-out.  This is still |        ing 2's amount: amount, or amount-in and  amount-out.   This  is  still | ||||||
|        supported because it keeps pre-hledger-1.17 csv  rules  files  working, |        supported  because  it  keeps pre-hledger-1.17 csv rules files working, | ||||||
|        and  because  it  can be more succinct, and because it converts posting |        and because it can be more succinct, and because  it  converts  posting | ||||||
|        2's amount to cost if there's a transaction price, which can be useful. |        2's amount to cost if there's a transaction price, which can be useful. | ||||||
| 
 | 
 | ||||||
|        If you have an existing rules file using the unnumbered form, you might |        If you have an existing rules file using the unnumbered form, you might | ||||||
|        want  to  use  the numbered form in certain conditional blocks, without |        want to use the numbered form in certain  conditional  blocks,  without | ||||||
|        having to update and retest all the old  rules.   To  facilitate  this, |        having  to  update  and  retest all the old rules.  To facilitate this, | ||||||
|        posting    1    ignores    amount/amount-in/amount-out    if   any   of |        posting   1   ignores    amount/amount-in/amount-out    if    any    of | ||||||
|        amount1/amount1-in/amount1-out are assigned, and posting 2 ignores them |        amount1/amount1-in/amount1-out are assigned, and posting 2 ignores them | ||||||
|        if  any  of  amount2/amount2-in/amount2-out are assigned, avoiding con- |        if any of amount2/amount2-in/amount2-out are  assigned,  avoiding  con- | ||||||
|        flicts. |        flicts. | ||||||
| 
 | 
 | ||||||
|    currency |    currency | ||||||
|        If the CSV has the currency symbol in a separate field (ie, not part of |        If the CSV has the currency symbol in a separate field (ie, not part of | ||||||
|        the  amount  field), you can use currencyN to prepend it to posting N's |        the amount field), you can use currencyN to prepend it to  posting  N's | ||||||
|        amount.  Or, currency with no number affects all postings. |        amount.  Or, currency with no number affects all postings. | ||||||
| 
 | 
 | ||||||
|    balance |    balance | ||||||
|        balanceN sets a balance assertion amount (or if the posting  amount  is |        balanceN  sets  a balance assertion amount (or if the posting amount is | ||||||
|        left empty, a balance assignment) on posting N. |        left empty, a balance assignment) on posting N. | ||||||
| 
 | 
 | ||||||
|        Also,  for  compatibility with hledger <1.17: balance with no number is |        Also, for compatibility with hledger <1.17: balance with no  number  is | ||||||
|        equivalent to balance1. |        equivalent to balance1. | ||||||
| 
 | 
 | ||||||
|        You can adjust the type of assertion/assignment with  the  balance-type |        You  can  adjust the type of assertion/assignment with the balance-type | ||||||
|        rule (see below). |        rule (see below). | ||||||
| 
 | 
 | ||||||
|    comment |    comment | ||||||
| @ -434,11 +436,11 @@ CSV RULES | |||||||
|    field assignment |    field assignment | ||||||
|               HLEDGERFIELDNAME FIELDVALUE |               HLEDGERFIELDNAME FIELDVALUE | ||||||
| 
 | 
 | ||||||
|        Instead of or in addition to a fields list, you can use  a  "field  as- |        Instead  of  or  in addition to a fields list, you can use a "field as- | ||||||
|        signment"  rule  to set the value of a single hledger field, by writing |        signment" rule to set the value of a single hledger field,  by  writing | ||||||
|        its name (any of the standard hledger field names above) followed by  a |        its  name (any of the standard hledger field names above) followed by a | ||||||
|        text  value.  The value may contain interpolated CSV fields, referenced |        text value.  The value may contain interpolated CSV fields,  referenced | ||||||
|        by their 1-based position in the CSV record (%N), or by the  name  they |        by  their  1-based position in the CSV record (%N), or by the name they | ||||||
|        were given in the fields list (%CSVFIELDNAME).  Some examples: |        were given in the fields list (%CSVFIELDNAME).  Some examples: | ||||||
| 
 | 
 | ||||||
|               # set the amount to the 4th CSV field, with " USD" appended |               # set the amount to the 4th CSV field, with " USD" appended | ||||||
| @ -447,14 +449,14 @@ CSV RULES | |||||||
|               # combine three fields to make a comment, containing note: and date: tags |               # combine three fields to make a comment, containing note: and date: tags | ||||||
|               comment note: %somefield - %anotherfield, date: %1 |               comment note: %somefield - %anotherfield, date: %1 | ||||||
| 
 | 
 | ||||||
|        Interpolation  strips  outer  whitespace (so a CSV value like " 1 " be- |        Interpolation strips outer whitespace (so a CSV value like "  1  "  be- | ||||||
|        comes 1 when interpolated) (#1051).  See TIPS below for more about ref- |        comes 1 when interpolated) (#1051).  See TIPS below for more about ref- | ||||||
|        erencing other fields. |        erencing other fields. | ||||||
| 
 | 
 | ||||||
|    separator |    separator | ||||||
|        You  can  use the separator rule to read other kinds of character-sepa- |        You can use the separator rule to read other kinds  of  character-sepa- | ||||||
|        rated data.  The argument is any single  separator  character,  or  the |        rated  data.   The  argument  is any single separator character, or the | ||||||
|        words  tab or space (case insensitive).  Eg, for comma-separated values |        words tab or space (case insensitive).  Eg, for comma-separated  values | ||||||
|        (CSV): |        (CSV): | ||||||
| 
 | 
 | ||||||
|               separator , |               separator , | ||||||
| @ -467,7 +469,7 @@ CSV RULES | |||||||
| 
 | 
 | ||||||
|               separator TAB |               separator TAB | ||||||
| 
 | 
 | ||||||
|        If the input file has a .csv, .ssv or .tsv file extension (or  a  csv:, |        If  the  input file has a .csv, .ssv or .tsv file extension (or a csv:, | ||||||
|        ssv:, tsv: prefix), the appropriate separator will be inferred automat- |        ssv:, tsv: prefix), the appropriate separator will be inferred automat- | ||||||
|        ically, and you won't need this rule. |        ically, and you won't need this rule. | ||||||
| 
 | 
 | ||||||
| @ -482,8 +484,8 @@ CSV RULES | |||||||
|                RULE |                RULE | ||||||
|                RULE |                RULE | ||||||
| 
 | 
 | ||||||
|        Conditional blocks ("if blocks") are a block of rules that are  applied |        Conditional  blocks ("if blocks") are a block of rules that are applied | ||||||
|        only  to CSV records which match certain patterns.  They are often used |        only to CSV records which match certain patterns.  They are often  used | ||||||
|        for customising account names based on transaction descriptions. |        for customising account names based on transaction descriptions. | ||||||
| 
 | 
 | ||||||
|    Matching the whole record |    Matching the whole record | ||||||
| @ -491,16 +493,16 @@ CSV RULES | |||||||
| 
 | 
 | ||||||
|               REGEX |               REGEX | ||||||
| 
 | 
 | ||||||
|        REGEX is a case-insensitive regular expression  which  tries  to  match |        REGEX  is  a  case-insensitive  regular expression which tries to match | ||||||
|        anywhere  within  the  CSV record.  It is a POSIX ERE (extended regular |        anywhere within the CSV record.  It is a POSIX  ERE  (extended  regular | ||||||
|        expression) that also supports GNU word boundaries (\b,  \B,  \<,  \>), |        expression)  that  also  supports GNU word boundaries (\b, \B, \<, \>), | ||||||
|        and  nothing  else.   If  you  have  trouble,  be  sure  to  check  our |        and  nothing  else.   If  you  have  trouble,  be  sure  to  check  our | ||||||
|        https://hledger.org/hledger.html#regular-expressions doc. |        https://hledger.org/hledger.html#regular-expressions doc. | ||||||
| 
 | 
 | ||||||
|        Important note: the record that is matched is not the original  record, |        Important  note: the record that is matched is not the original record, | ||||||
|        but  a synthetic one, with any enclosing double quotes (but not enclos- |        but a synthetic one, with any enclosing double quotes (but not  enclos- | ||||||
|        ing whitespace) removed, and always comma-separated (which means that a |        ing whitespace) removed, and always comma-separated (which means that a | ||||||
|        field  containing  a  comma  will  appear like two fields).  Eg, if the |        field containing a comma will appear like  two  fields).   Eg,  if  the | ||||||
|        original record is 2020-01-01; "Acme, Inc.";  1,000, the REGEX will ac- |        original record is 2020-01-01; "Acme, Inc.";  1,000, the REGEX will ac- | ||||||
|        tually see 2020-01-01,Acme, Inc.,  1,000). |        tually see 2020-01-01,Acme, Inc.,  1,000). | ||||||
| 
 | 
 | ||||||
| @ -509,14 +511,14 @@ CSV RULES | |||||||
| 
 | 
 | ||||||
|               %CSVFIELD REGEX |               %CSVFIELD REGEX | ||||||
| 
 | 
 | ||||||
|        which  matches just the content of a particular CSV field.  CSVFIELD is |        which matches just the content of a particular CSV field.  CSVFIELD  is | ||||||
|        a percent sign followed by the field's  name  or  column  number,  like |        a  percent  sign  followed  by  the field's name or column number, like | ||||||
|        %date or %1. |        %date or %1. | ||||||
| 
 | 
 | ||||||
|    Combining matchers |    Combining matchers | ||||||
|        A single matcher can be written on the same line as the "if"; or multi- |        A single matcher can be written on the same line as the "if"; or multi- | ||||||
|        ple matchers can be written on the following lines, non-indented.  Mul- |        ple matchers can be written on the following lines, non-indented.  Mul- | ||||||
|        tiple  matchers are OR'd (any one of them can match), unless one begins |        tiple matchers are OR'd (any one of them can match), unless one  begins | ||||||
|        with an & symbol, in which case it is AND'ed with the previous matcher. |        with an & symbol, in which case it is AND'ed with the previous matcher. | ||||||
| 
 | 
 | ||||||
|               if |               if | ||||||
| @ -525,8 +527,8 @@ CSV RULES | |||||||
|                RULE |                RULE | ||||||
| 
 | 
 | ||||||
|    Rules applied on successful match |    Rules applied on successful match | ||||||
|        After the patterns there should be one or more rules to apply, all  in- |        After  the patterns there should be one or more rules to apply, all in- | ||||||
|        dented  by at least one space.  Three kinds of rule are allowed in con- |        dented by at least one space.  Three kinds of rule are allowed in  con- | ||||||
|        ditional blocks: |        ditional blocks: | ||||||
| 
 | 
 | ||||||
|        o field assignments (to set a hledger field) |        o field assignments (to set a hledger field) | ||||||
| @ -556,11 +558,11 @@ CSV RULES | |||||||
|               MATCHER3,VALUE31,VALUE32,...,VALUE3n |               MATCHER3,VALUE31,VALUE32,...,VALUE3n | ||||||
|               <empty line> |               <empty line> | ||||||
| 
 | 
 | ||||||
|        Conditional tables ("if tables") are  a  different  syntax  to  specify |        Conditional  tables  ("if  tables")  are  a different syntax to specify | ||||||
|        field  assignments that will be applied only to CSV records which match |        field assignments that will be applied only to CSV records which  match | ||||||
|        certain patterns. |        certain patterns. | ||||||
| 
 | 
 | ||||||
|        MATCHER could be either field or record matcher,  as  described  above. |        MATCHER  could  be  either field or record matcher, as described above. | ||||||
|        When MATCHER matches, values from that row would be assigned to the CSV |        When MATCHER matches, values from that row would be assigned to the CSV | ||||||
|        fields named on the if line, in the same order. |        fields named on the if line, in the same order. | ||||||
| 
 | 
 | ||||||
| @ -584,17 +586,17 @@ CSV RULES | |||||||
|                 ... |                 ... | ||||||
|                 CSVFIELDNAMEn VALUE3n |                 CSVFIELDNAMEn VALUE3n | ||||||
| 
 | 
 | ||||||
|        Each line starting with MATCHER should contain enough (possibly  empty) |        Each  line starting with MATCHER should contain enough (possibly empty) | ||||||
|        values for all the listed fields. |        values for all the listed fields. | ||||||
| 
 | 
 | ||||||
|        Rules  would be checked and applied in the order they are listed in the |        Rules would be checked and applied in the order they are listed in  the | ||||||
|        table and, like with if blocks, later rules (in the same or another ta- |        table and, like with if blocks, later rules (in the same or another ta- | ||||||
|        ble) or if blocks could override the effect of any rule. |        ble) or if blocks could override the effect of any rule. | ||||||
| 
 | 
 | ||||||
|        Instead  of ',' you can use a variety of other non-alphanumeric charac- |        Instead of ',' you can use a variety of other non-alphanumeric  charac- | ||||||
|        ters as a separator.  First character after if is taken to be the sepa- |        ters as a separator.  First character after if is taken to be the sepa- | ||||||
|        rator  for the rest of the table.  It is the responsibility of the user |        rator for the rest of the table.  It is the responsibility of the  user | ||||||
|        to ensure that separator does not occur inside MATCHERs  and  values  - |        to  ensure  that  separator does not occur inside MATCHERs and values - | ||||||
|        there is no way to escape separator. |        there is no way to escape separator. | ||||||
| 
 | 
 | ||||||
|        Example: |        Example: | ||||||
| @ -605,7 +607,7 @@ CSV RULES | |||||||
|               2020/01/12.*Plumbing LLC,expenses:house:upkeep,emergency plumbing call-out |               2020/01/12.*Plumbing LLC,expenses:house:upkeep,emergency plumbing call-out | ||||||
| 
 | 
 | ||||||
|    end |    end | ||||||
|        This  rule  can  be  used inside if blocks (only), to make hledger stop |        This rule can be used inside if blocks (only),  to  make  hledger  stop | ||||||
|        reading this CSV file and move on to the next input file, or to command |        reading this CSV file and move on to the next input file, or to command | ||||||
|        execution.  Eg: |        execution.  Eg: | ||||||
| 
 | 
 | ||||||
| @ -616,10 +618,10 @@ CSV RULES | |||||||
|    date-format |    date-format | ||||||
|               date-format DATEFMT |               date-format DATEFMT | ||||||
| 
 | 
 | ||||||
|        This  is  a  helper for the date (and date2) fields.  If your CSV dates |        This is a helper for the date (and date2) fields.  If  your  CSV  dates | ||||||
|        are not formatted like YYYY-MM-DD,  YYYY/MM/DD  or  YYYY.MM.DD,  you'll |        are  not  formatted  like  YYYY-MM-DD, YYYY/MM/DD or YYYY.MM.DD, you'll | ||||||
|        need  to  add  a  date-format rule describing them with a strptime date |        need to add a date-format rule describing them  with  a  strptime  date | ||||||
|        parsing pattern, which must parse the CSV date value completely.   Some |        parsing  pattern, which must parse the CSV date value completely.  Some | ||||||
|        examples: |        examples: | ||||||
| 
 | 
 | ||||||
|               # MM/DD/YY |               # MM/DD/YY | ||||||
| @ -640,16 +642,29 @@ CSV RULES | |||||||
|        https://hackage.haskell.org/package/time/docs/Data-Time-For- |        https://hackage.haskell.org/package/time/docs/Data-Time-For- | ||||||
|        mat.html#v:formatTime |        mat.html#v:formatTime | ||||||
| 
 | 
 | ||||||
|  |    decimal-mark | ||||||
|  |               decimal-mark . | ||||||
|  | 
 | ||||||
|  |        or: | ||||||
|  | 
 | ||||||
|  |               decimal-mark , | ||||||
|  | 
 | ||||||
|  |        hledger  automatically accepts either period or comma as a decimal mark | ||||||
|  |        when parsing numbers (cf Amounts).  However if any numbers in  the  CSV | ||||||
|  |        contain  digit  group  marks,  such  as thousand-separating commas, you | ||||||
|  |        should declare the decimal mark explicitly with  this  rule,  to  avoid | ||||||
|  |        misparsed numbers. | ||||||
|  | 
 | ||||||
|    newest-first |    newest-first | ||||||
|        hledger always sorts the generated transactions by date.   Transactions |        hledger  always sorts the generated transactions by date.  Transactions | ||||||
|        on  the same date should appear in the same order as their CSV records, |        on the same date should appear in the same order as their CSV  records, | ||||||
|        as hledger can usually auto-detect whether the CSV's  normal  order  is |        as  hledger  can  usually auto-detect whether the CSV's normal order is | ||||||
|        oldest first or newest first.  But if all of the following are true: |        oldest first or newest first.  But if all of the following are true: | ||||||
| 
 | 
 | ||||||
|        o the  CSV  might  sometimes  contain just one day of data (all records |        o the CSV might sometimes contain just one day  of  data  (all  records | ||||||
|          having the same date) |          having the same date) | ||||||
| 
 | 
 | ||||||
|        o the CSV records are normally in reverse chronological  order  (newest |        o the  CSV  records are normally in reverse chronological order (newest | ||||||
|          at the top) |          at the top) | ||||||
| 
 | 
 | ||||||
|        o and you care about preserving the order of same-day transactions |        o and you care about preserving the order of same-day transactions | ||||||
| @ -662,9 +677,9 @@ CSV RULES | |||||||
|    include |    include | ||||||
|               include RULESFILE |               include RULESFILE | ||||||
| 
 | 
 | ||||||
|        This  includes  the  contents  of another CSV rules file at this point. |        This includes the contents of another CSV rules  file  at  this  point. | ||||||
|        RULESFILE is an absolute file path or a path relative  to  the  current |        RULESFILE  is  an  absolute file path or a path relative to the current | ||||||
|        file's  directory.  This can be useful for sharing common rules between |        file's directory.  This can be useful for sharing common rules  between | ||||||
|        several rules files, eg: |        several rules files, eg: | ||||||
| 
 | 
 | ||||||
|               # someaccount.csv.rules |               # someaccount.csv.rules | ||||||
| @ -679,10 +694,10 @@ CSV RULES | |||||||
| 
 | 
 | ||||||
|    balance-type |    balance-type | ||||||
|        Balance assertions generated by assigning to balanceN are of the simple |        Balance assertions generated by assigning to balanceN are of the simple | ||||||
|        =  type  by  default, which is a single-commodity, subaccount-excluding |        = type by default, which is  a  single-commodity,  subaccount-excluding | ||||||
|        assertion.  You may find the subaccount-including variants more useful, |        assertion.  You may find the subaccount-including variants more useful, | ||||||
|        eg  if  you  have  created some virtual subaccounts of checking to help |        eg if you have created some virtual subaccounts  of  checking  to  help | ||||||
|        with budgeting.  You can select a different type of assertion with  the |        with  budgeting.  You can select a different type of assertion with the | ||||||
|        balance-type rule: |        balance-type rule: | ||||||
| 
 | 
 | ||||||
|               # balance assertions will consider all commodities and all subaccounts |               # balance assertions will consider all commodities and all subaccounts | ||||||
| @ -697,19 +712,19 @@ CSV RULES | |||||||
| 
 | 
 | ||||||
| TIPS | TIPS | ||||||
|    Rapid feedback |    Rapid feedback | ||||||
|        It's  a  good idea to get rapid feedback while creating/troubleshooting |        It's a good idea to get rapid feedback  while  creating/troubleshooting | ||||||
|        CSV rules.  Here's a good way, using entr from http://eradman.com/entr- |        CSV rules.  Here's a good way, using entr from http://eradman.com/entr- | ||||||
|        project : |        project : | ||||||
| 
 | 
 | ||||||
|               $ ls foo.csv* | entr bash -c 'echo ----; hledger -f foo.csv print desc:SOMEDESC' |               $ ls foo.csv* | entr bash -c 'echo ----; hledger -f foo.csv print desc:SOMEDESC' | ||||||
| 
 | 
 | ||||||
|        A  desc:  query (eg) is used to select just one, or a few, transactions |        A desc: query (eg) is used to select just one, or a  few,  transactions | ||||||
|        of interest.  "bash -c" is used to run multiple  commands,  so  we  can |        of  interest.   "bash  -c"  is used to run multiple commands, so we can | ||||||
|        echo  a  separator  each  time the command re-runs, making it easier to |        echo a separator each time the command re-runs,  making  it  easier  to | ||||||
|        read the output. |        read the output. | ||||||
| 
 | 
 | ||||||
|    Valid CSV |    Valid CSV | ||||||
|        hledger accepts CSV conforming to RFC 4180.  When CSV  values  are  en- |        hledger  accepts  CSV  conforming to RFC 4180.  When CSV values are en- | ||||||
|        closed in quotes, note: |        closed in quotes, note: | ||||||
| 
 | 
 | ||||||
|        o they must be double quotes (not single quotes) |        o they must be double quotes (not single quotes) | ||||||
| @ -717,9 +732,9 @@ TIPS | |||||||
|        o spaces outside the quotes are not allowed |        o spaces outside the quotes are not allowed | ||||||
| 
 | 
 | ||||||
|    File Extension |    File Extension | ||||||
|        To  help hledger identify the format and show the right error messages, |        To help hledger identify the format and show the right error  messages, | ||||||
|        CSV/SSV/TSV files should normally be named with a .csv,  .ssv  or  .tsv |        CSV/SSV/TSV  files  should  normally be named with a .csv, .ssv or .tsv | ||||||
|        filename  extension.   Or,  the file path should be prefixed with csv:, |        filename extension.  Or, the file path should be  prefixed  with  csv:, | ||||||
|        ssv: or tsv:.  Eg: |        ssv: or tsv:.  Eg: | ||||||
| 
 | 
 | ||||||
|               $ hledger -f foo.ssv print |               $ hledger -f foo.ssv print | ||||||
| @ -728,48 +743,48 @@ TIPS | |||||||
| 
 | 
 | ||||||
|               $ cat foo | hledger -f ssv:- foo |               $ cat foo | hledger -f ssv:- foo | ||||||
| 
 | 
 | ||||||
|        You can override the file extension with a separator  rule  if  needed. |        You  can  override  the file extension with a separator rule if needed. | ||||||
|        See also: Input files in the hledger manual. |        See also: Input files in the hledger manual. | ||||||
| 
 | 
 | ||||||
|    Reading multiple CSV files |    Reading multiple CSV files | ||||||
|        If  you  use  multiple  -f  options to read multiple CSV files at once, |        If you use multiple -f options to read  multiple  CSV  files  at  once, | ||||||
|        hledger will look for a correspondingly-named rules file for  each  CSV |        hledger  will  look for a correspondingly-named rules file for each CSV | ||||||
|        file.   But if you use the --rules-file option, that rules file will be |        file.  But if you use the --rules-file option, that rules file will  be | ||||||
|        used for all the CSV files. |        used for all the CSV files. | ||||||
| 
 | 
 | ||||||
|    Valid transactions |    Valid transactions | ||||||
|        After reading a CSV file, hledger post-processes and validates the gen- |        After reading a CSV file, hledger post-processes and validates the gen- | ||||||
|        erated journal entries as it would for a journal file - balancing them, |        erated journal entries as it would for a journal file - balancing them, | ||||||
|        applying balance assignments, and canonicalising  amount  styles.   Any |        applying  balance  assignments,  and canonicalising amount styles.  Any | ||||||
|        errors  at this stage will be reported in the usual way, displaying the |        errors at this stage will be reported in the usual way, displaying  the | ||||||
|        problem entry. |        problem entry. | ||||||
| 
 | 
 | ||||||
|        There is one exception: balance assertions, if you have generated them, |        There is one exception: balance assertions, if you have generated them, | ||||||
|        will  not  be checked, since normally these will work only when the CSV |        will not be checked, since normally these will work only when  the  CSV | ||||||
|        data is part of the main journal.  If you do need to check balance  as- |        data  is part of the main journal.  If you do need to check balance as- | ||||||
|        sertions generated from CSV right away, pipe into another hledger: |        sertions generated from CSV right away, pipe into another hledger: | ||||||
| 
 | 
 | ||||||
|               $ hledger -f file.csv print | hledger -f- print |               $ hledger -f file.csv print | hledger -f- print | ||||||
| 
 | 
 | ||||||
|    Deduplicating, importing |    Deduplicating, importing | ||||||
|        When  you  download a CSV file periodically, eg to get your latest bank |        When you download a CSV file periodically, eg to get your  latest  bank | ||||||
|        transactions, the new file may overlap with  the  old  one,  containing |        transactions,  the  new  file  may overlap with the old one, containing | ||||||
|        some of the same records. |        some of the same records. | ||||||
| 
 | 
 | ||||||
|        The import command will (a) detect the new transactions, and (b) append |        The import command will (a) detect the new transactions, and (b) append | ||||||
|        just those transactions to your main journal.  It is idempotent, so you |        just those transactions to your main journal.  It is idempotent, so you | ||||||
|        don't  have to remember how many times you ran it or with which version |        don't have to remember how many times you ran it or with which  version | ||||||
|        of the CSV.  (It keeps state in a hidden .latest.FILE.csv  file.)  This |        of  the  CSV.  (It keeps state in a hidden .latest.FILE.csv file.) This | ||||||
|        is the easiest way to import CSV data.  Eg: |        is the easiest way to import CSV data.  Eg: | ||||||
| 
 | 
 | ||||||
|               # download the latest CSV files, then run this command. |               # download the latest CSV files, then run this command. | ||||||
|               # Note, no -f flags needed here. |               # Note, no -f flags needed here. | ||||||
|               $ hledger import *.csv [--dry] |               $ hledger import *.csv [--dry] | ||||||
| 
 | 
 | ||||||
|        This  method  works  for  most CSV files.  (Where records have a stable |        This method works for most CSV files.  (Where  records  have  a  stable | ||||||
|        chronological order, and new records appear only at the new end.) |        chronological order, and new records appear only at the new end.) | ||||||
| 
 | 
 | ||||||
|        A number of other tools and workflows, hledger-specific and  otherwise, |        A  number of other tools and workflows, hledger-specific and otherwise, | ||||||
|        exist for converting, deduplicating, classifying and managing CSV data. |        exist for converting, deduplicating, classifying and managing CSV data. | ||||||
|        See: |        See: | ||||||
| 
 | 
 | ||||||
| @ -780,30 +795,30 @@ TIPS | |||||||
|    Setting amounts |    Setting amounts | ||||||
|        A posting amount can be set in one of these ways: |        A posting amount can be set in one of these ways: | ||||||
| 
 | 
 | ||||||
|        o by assigning (with a fields list  or  field  assignment)  to  amountN |        o by  assigning  (with  a  fields  list or field assignment) to amountN | ||||||
|          (posting N's amount) or amount (posting 1's amount) |          (posting N's amount) or amount (posting 1's amount) | ||||||
| 
 | 
 | ||||||
|        o by  assigning to amountN-in and amountN-out (or amount-in and amount- |        o by assigning to amountN-in and amountN-out (or amount-in and  amount- | ||||||
|          out).  For each CSV record, whichever of these has a  non-zero  value |          out).   For  each CSV record, whichever of these has a non-zero value | ||||||
|          will  be  used,  with  appropriate  sign.  If both contain a non-zero |          will be used, with appropriate sign.   If  both  contain  a  non-zero | ||||||
|          value, this may not work. |          value, this may not work. | ||||||
| 
 | 
 | ||||||
|        o by assigning to balanceN (or balance) instead of the  above,  setting |        o by  assigning  to balanceN (or balance) instead of the above, setting | ||||||
|          the  amount  indirectly via a balance assignment.  If you do this the |          the amount indirectly via a balance assignment.  If you do  this  the | ||||||
|          default account name may be wrong, so you should set that explicitly. |          default account name may be wrong, so you should set that explicitly. | ||||||
| 
 | 
 | ||||||
|        There is some special handling for an amount's sign: |        There is some special handling for an amount's sign: | ||||||
| 
 | 
 | ||||||
|        o If an amount value is parenthesised, it will be de-parenthesised  and |        o If  an amount value is parenthesised, it will be de-parenthesised and | ||||||
|          sign-flipped. |          sign-flipped. | ||||||
| 
 | 
 | ||||||
|        o If  an amount value begins with a double minus sign, those cancel out |        o If an amount value begins with a double minus sign, those cancel  out | ||||||
|          and are removed. |          and are removed. | ||||||
| 
 | 
 | ||||||
|        o If an amount value begins with a plus sign, that will be removed |        o If an amount value begins with a plus sign, that will be removed | ||||||
| 
 | 
 | ||||||
|    Setting currency/commodity |    Setting currency/commodity | ||||||
|        If the currency/commodity  symbol  is  included  in  the  CSV's  amount |        If  the  currency/commodity  symbol  is  included  in  the CSV's amount | ||||||
|        field(s): |        field(s): | ||||||
| 
 | 
 | ||||||
|               2020-01-01,foo,$123.00 |               2020-01-01,foo,$123.00 | ||||||
| @ -822,7 +837,7 @@ TIPS | |||||||
|               2020-01-01,foo,USD,123.00 |               2020-01-01,foo,USD,123.00 | ||||||
| 
 | 
 | ||||||
|        You can assign that to the currency pseudo-field, which has the special |        You can assign that to the currency pseudo-field, which has the special | ||||||
|        effect  of prepending itself to every amount in the transaction (on the |        effect of prepending itself to every amount in the transaction (on  the | ||||||
|        left, with no separating space): |        left, with no separating space): | ||||||
| 
 | 
 | ||||||
|               fields date,description,currency,amount |               fields date,description,currency,amount | ||||||
| @ -831,7 +846,7 @@ TIPS | |||||||
|                   expenses:unknown       USD123.00 |                   expenses:unknown       USD123.00 | ||||||
|                   income:unknown        USD-123.00 |                   income:unknown        USD-123.00 | ||||||
| 
 | 
 | ||||||
|        Or, you can use a field assignment to construct  the  amount  yourself, |        Or,  you  can  use a field assignment to construct the amount yourself, | ||||||
|        with more control.  Eg to put the symbol on the right, and separated by |        with more control.  Eg to put the symbol on the right, and separated by | ||||||
|        a space: |        a space: | ||||||
| 
 | 
 | ||||||
| @ -842,13 +857,13 @@ TIPS | |||||||
|                   expenses:unknown        123.00 USD |                   expenses:unknown        123.00 USD | ||||||
|                   income:unknown         -123.00 USD |                   income:unknown         -123.00 USD | ||||||
| 
 | 
 | ||||||
|        Note we used a temporary field name (cur) that is not currency  -  that |        Note  we  used a temporary field name (cur) that is not currency - that | ||||||
|        would trigger the prepending effect, which we don't want here. |        would trigger the prepending effect, which we don't want here. | ||||||
| 
 | 
 | ||||||
|    Referencing other fields |    Referencing other fields | ||||||
|        In  field assignments, you can interpolate only CSV fields, not hledger |        In field assignments, you can interpolate only CSV fields, not  hledger | ||||||
|        fields.  In the example below, there's both a CSV field and  a  hledger |        fields.   In  the example below, there's both a CSV field and a hledger | ||||||
|        field  named  amount1, but %amount1 always means the CSV field, not the |        field named amount1, but %amount1 always means the CSV field,  not  the | ||||||
|        hledger field: |        hledger field: | ||||||
| 
 | 
 | ||||||
|               # Name the third CSV field "amount1" |               # Name the third CSV field "amount1" | ||||||
| @ -860,7 +875,7 @@ TIPS | |||||||
|               # Set comment to the CSV amount1 (not the amount1 assigned above) |               # Set comment to the CSV amount1 (not the amount1 assigned above) | ||||||
|               comment %amount1 |               comment %amount1 | ||||||
| 
 | 
 | ||||||
|        Here, since there's no CSV amount1 field, %amount1 will produce a  lit- |        Here,  since there's no CSV amount1 field, %amount1 will produce a lit- | ||||||
|        eral "amount1": |        eral "amount1": | ||||||
| 
 | 
 | ||||||
|               fields date,description,csvamount |               fields date,description,csvamount | ||||||
| @ -868,7 +883,7 @@ TIPS | |||||||
|               # Can't interpolate amount1 here |               # Can't interpolate amount1 here | ||||||
|               comment %amount1 |               comment %amount1 | ||||||
| 
 | 
 | ||||||
|        When  there  are  multiple field assignments to the same hledger field, |        When there are multiple field assignments to the  same  hledger  field, | ||||||
|        only the last one takes effect.  Here, comment's value will be be B, or |        only the last one takes effect.  Here, comment's value will be be B, or | ||||||
|        C if "something" is matched, but never A: |        C if "something" is matched, but never A: | ||||||
| 
 | 
 | ||||||
| @ -878,14 +893,14 @@ TIPS | |||||||
|                comment C |                comment C | ||||||
| 
 | 
 | ||||||
|    How CSV rules are evaluated |    How CSV rules are evaluated | ||||||
|        Here's  how  to  think of CSV rules being evaluated (if you really need |        Here's how to think of CSV rules being evaluated (if  you  really  need | ||||||
|        to).  First, |        to).  First, | ||||||
| 
 | 
 | ||||||
|        o include - all includes are inlined, from top to bottom, depth  first. |        o include  - all includes are inlined, from top to bottom, depth first. | ||||||
|          (At  each  include  point the file is inlined and scanned for further |          (At each include point the file is inlined and  scanned  for  further | ||||||
|          includes, recursively, before proceeding.) |          includes, recursively, before proceeding.) | ||||||
| 
 | 
 | ||||||
|        Then "global" rules are evaluated, top to bottom.  If  a  rule  is  re- |        Then  "global"  rules  are  evaluated, top to bottom.  If a rule is re- | ||||||
|        peated, the last one wins: |        peated, the last one wins: | ||||||
| 
 | 
 | ||||||
|        o skip (at top level) |        o skip (at top level) | ||||||
| @ -899,30 +914,30 @@ TIPS | |||||||
| 
 | 
 | ||||||
|        Then for each CSV record in turn: |        Then for each CSV record in turn: | ||||||
| 
 | 
 | ||||||
|        o test all if blocks.  If any of them contain a end rule, skip all  re- |        o test  all if blocks.  If any of them contain a end rule, skip all re- | ||||||
|          maining  CSV  records.  Otherwise if any of them contain a skip rule, |          maining CSV records.  Otherwise if any of them contain a  skip  rule, | ||||||
|          skip that many CSV records.   If  there  are  multiple  matched  skip |          skip  that  many  CSV  records.   If  there are multiple matched skip | ||||||
|          rules, the first one wins. |          rules, the first one wins. | ||||||
| 
 | 
 | ||||||
|        o collect  all field assignments at top level and in matched if blocks. |        o collect all field assignments at top level and in matched if  blocks. | ||||||
|          When there are multiple assignments for a field, keep only  the  last |          When  there  are multiple assignments for a field, keep only the last | ||||||
|          one. |          one. | ||||||
| 
 | 
 | ||||||
|        o compute  a value for each hledger field - either the one that was as- |        o compute a value for each hledger field - either the one that was  as- | ||||||
|          signed to it (and interpolate the %CSVFIELDNAME references), or a de- |          signed to it (and interpolate the %CSVFIELDNAME references), or a de- | ||||||
|          fault |          fault | ||||||
| 
 | 
 | ||||||
|        o generate a synthetic hledger transaction from these values. |        o generate a synthetic hledger transaction from these values. | ||||||
| 
 | 
 | ||||||
|        This  is all part of the CSV reader, one of several readers hledger can |        This is all part of the CSV reader, one of several readers hledger  can | ||||||
|        use to parse input files.  When all files have been read  successfully, |        use  to parse input files.  When all files have been read successfully, | ||||||
|        the  transactions  are passed as input to whichever hledger command the |        the transactions are passed as input to whichever hledger  command  the | ||||||
|        user specified. |        user specified. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| REPORTING BUGS | REPORTING BUGS | ||||||
|        Report bugs at http://bugs.hledger.org (or on the #hledger IRC  channel |        Report  bugs at http://bugs.hledger.org (or on the #hledger IRC channel | ||||||
|        or hledger mail list) |        or hledger mail list) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -936,7 +951,7 @@ COPYRIGHT | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| SEE ALSO | SEE ALSO | ||||||
|        hledger(1),      hledger-ui(1),     hledger-web(1),     hledger-api(1), |        hledger(1),     hledger-ui(1),     hledger-web(1),      hledger-api(1), | ||||||
|        hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- |        hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- | ||||||
|        dot(5), ledger(1) |        dot(5), ledger(1) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1588,10 +1588,12 @@ T} | |||||||
| If you want intervals that start on arbitrary day of your choosing and | If you want intervals that start on arbitrary day of your choosing and | ||||||
| span a week, month or year, you need to use any of the following: | span a week, month or year, you need to use any of the following: | ||||||
| .PP | .PP | ||||||
| \f[C]every Nth day of week\f[R], \f[C]every <weekday>\f[R], | \f[C]every Nth day of week\f[R], \f[C]every WEEKDAYNAME\f[R] (eg | ||||||
|  | \f[C]mon|tue|wed|thu|fri|sat|sun\f[R]), | ||||||
| \f[C]every Nth day [of month]\f[R], | \f[C]every Nth day [of month]\f[R], | ||||||
| \f[C]every Nth weekday [of month]\f[R], \f[C]every MM/DD [of year]\f[R], | \f[C]every Nth WEEKDAYNAME [of month]\f[R], | ||||||
| \f[C]every Nth MMM [of year]\f[R], \f[C]every MMM Nth [of year]\f[R]. | \f[C]every MM/DD [of year]\f[R], \f[C]every Nth MMM [of year]\f[R], | ||||||
|  | \f[C]every MMM Nth [of year]\f[R]. | ||||||
| .PP | .PP | ||||||
| Examples: | Examples: | ||||||
| .PP | .PP | ||||||
| @ -2113,7 +2115,7 @@ Related: #329, #1083. | |||||||
| .PP | .PP | ||||||
| .TS | .TS | ||||||
| tab(@); | tab(@); | ||||||
| lw(11.7n) lw(11.2n) lw(11.9n) lw(13.1n) lw(12.4n) lw(9.8n). | lw(7.4n) lw(11.7n) lw(19.6n) lw(6.8n) lw(19.6n) lw(5.0n). | ||||||
| T{ | T{ | ||||||
| Report type | Report type | ||||||
| T}@T{ | T}@T{ | ||||||
| @ -2258,15 +2260,35 @@ T}@T{ | |||||||
| value at DATE/today of sums of postings | value at DATE/today of sums of postings | ||||||
| T} | T} | ||||||
| T{ | T{ | ||||||
| balances (with report interval) | balances changes (with report interval) | ||||||
| T}@T{ | T}@T{ | ||||||
| sums of costs | sums of costs of postings in interval | ||||||
| T}@T{ | T}@T{ | ||||||
| value at period ends of sums of postings | value at period ends of sums of postings before period end minus value | ||||||
|  | at period starts of sums of all postings before period start | ||||||
| T}@T{ | T}@T{ | ||||||
| not supported | not supported | ||||||
| T}@T{ | T}@T{ | ||||||
| value at period ends of sums of postings | value at period ends of sums of postings before period end minus value | ||||||
|  | at period starts of sums of all postings before period start | ||||||
|  | T}@T{ | ||||||
|  | value at DATE/today of sums of postings | ||||||
|  | T} | ||||||
|  | T{ | ||||||
|  | end balances (with report interval and --cumulative or -H) | ||||||
|  | T}@T{ | ||||||
|  | sums of costs of postings from report start (or before report start with | ||||||
|  | -H) and interval end | ||||||
|  | T}@T{ | ||||||
|  | value at period ends of sums of all postings before period end (minus | ||||||
|  | value at report start of of sums of all postings before report start | ||||||
|  | with --cumulative) | ||||||
|  | T}@T{ | ||||||
|  | not supported | ||||||
|  | T}@T{ | ||||||
|  | value at period ends of sums of all postings before period end (minus | ||||||
|  | value at report start of of sums of all postings before report start | ||||||
|  | with --cumulative) | ||||||
| T}@T{ | T}@T{ | ||||||
| value at DATE/today of sums of postings | value at DATE/today of sums of postings | ||||||
| T} | T} | ||||||
| @ -2275,11 +2297,11 @@ starting balances (with report interval and -H) | |||||||
| T}@T{ | T}@T{ | ||||||
| sums of costs of postings before report start | sums of costs of postings before report start | ||||||
| T}@T{ | T}@T{ | ||||||
| sums of postings before report start | value at report start of sums of all postings before report start | ||||||
| T}@T{ | T}@T{ | ||||||
| not supported | not supported | ||||||
| T}@T{ | T}@T{ | ||||||
| sums of postings before report start | value at report start of sums of all postings before report start | ||||||
| T}@T{ | T}@T{ | ||||||
| sums of postings before report start | sums of postings before report start | ||||||
| T} | T} | ||||||
|  | |||||||
| @ -1305,9 +1305,10 @@ end on the last one, as described above. | |||||||
|    If you want intervals that start on arbitrary day of your choosing |    If you want intervals that start on arbitrary day of your choosing | ||||||
| and span a week, month or year, you need to use any of the following: | and span a week, month or year, you need to use any of the following: | ||||||
| 
 | 
 | ||||||
|    'every Nth day of week', 'every <weekday>', 'every Nth day [of |    'every Nth day of week', 'every WEEKDAYNAME' (eg | ||||||
| month]', 'every Nth weekday [of month]', 'every MM/DD [of year]', 'every | 'mon|tue|wed|thu|fri|sat|sun'), 'every Nth day [of month]', 'every Nth | ||||||
| Nth MMM [of year]', 'every MMM Nth [of year]'. | WEEKDAYNAME [of month]', 'every MM/DD [of year]', 'every Nth MMM [of | ||||||
|  | year]', 'every MMM Nth [of year]'. | ||||||
| 
 | 
 | ||||||
|    Examples: |    Examples: | ||||||
| 
 | 
 | ||||||
| @ -1785,76 +1786,103 @@ sideways.)  It may be useful when troubleshooting.  If you find | |||||||
| problems, please report them, ideally with a reproducible example. | problems, please report them, ideally with a reproducible example. | ||||||
| Related: #329, #1083. | Related: #329, #1083. | ||||||
| 
 | 
 | ||||||
| Report       '-B',        '-V', '-X'   '--value=then' '--value=end' '--value=DATE', | Report   '-B',        '-V', '-X'           '--value=then''--value=end'  '--value=DATE', | ||||||
| type         '--value=cost'                                         '--value=now' | type     '--value=cost'                                                 '--value=now' | ||||||
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ||||||
| *print* | *print* | ||||||
| posting      cost         value at     value at       value at      value at | posting  cost         value at report      value   value at report or   value | ||||||
| amounts                   report end   posting date   report or     DATE/today | amounts               end or today         at      journal end          at | ||||||
|                           or today                    journal end |                                            posting                      DATE/today | ||||||
| balance      unchanged    unchanged    unchanged      unchanged     unchanged |                                            date | ||||||
|  | balance  unchanged    unchanged            unchangedunchanged           unchanged | ||||||
| assertions | assertions | ||||||
| / | / | ||||||
| assignments | assignments | ||||||
| *register* | *register* | ||||||
| starting     cost         value at     not            value at      value at | starting cost         value at day         not     value at day         value | ||||||
| balance                   day before   supported      day before    DATE/today | balance               before report or     supportedbefore report or    at | ||||||
| (with -H)                 report or                   report or | (with                 journal start                journal start        DATE/today | ||||||
|                           journal                     journal | -H) | ||||||
|                           start                       start | posting  cost         value at report      value   value at report or   value | ||||||
| posting      cost         value at     value at       value at      value at | amounts               end or today         at      journal end          at | ||||||
| amounts                   report end   posting date   report or     DATE/today | (no                                        posting                      DATE/today | ||||||
| (no report                or today                    journal end | report                                     date | ||||||
| interval) | interval) | ||||||
| summary      summarised   value at     sum of         value at      value at | summary  summarised   value at period      sum     value at period      value | ||||||
| posting      cost         period       postings in    period ends   DATE/today | posting  cost         ends                 of      ends                 at | ||||||
| amounts                   ends         interval, | amounts                                    postings                     DATE/today | ||||||
| (with                                  valued at | (with                                      in | ||||||
| report                                 interval | report                                     interval, | ||||||
| interval)                              start | interval)                                  valued | ||||||
| running      sum/average  sum/average  sum/average    sum/average   sum/average |                                            at | ||||||
| total/averageof           of           of displayed   of            of |                                            interval | ||||||
|              displayed    displayed    values         displayed     displayed |                                            start | ||||||
|              values       values                      values        values | running  sum/average  sum/average of       sum/averagesum/average of    sum/average | ||||||
|  | total/averageof       displayed values     of      displayed values     of | ||||||
|  |          displayed                         displayed                    displayed | ||||||
|  |          values                            values                       values | ||||||
| *balance | *balance | ||||||
| (bs, bse, | (bs, | ||||||
| cf, is..)* | bse, | ||||||
| balances     sums of      value at     not            value at      value at | cf, | ||||||
| (no report   costs        report end   supported      report or     DATE/today | is..)* | ||||||
| interval)                 or today                    journal end   of sums | balances sums of      value at report      not     value at report or   value | ||||||
|                           of sums of                  of sums of    of | (no      costs        end or today of      supportedjournal end of      at | ||||||
|                           postings                    postings      postings | report                sums of postings             sums of postings     DATE/today | ||||||
| balances     sums of      value at     not            value at      value at | interval)                                                               of | ||||||
| (with        costs        period       supported      period ends   DATE/today |                                                                         sums | ||||||
| report                    ends of                     of sums of    of sums |                                                                         of | ||||||
| interval)                 sums of                     postings      of |                                                                         postings | ||||||
|                           postings                                  postings | balances sums of      value at period      not     value at period      value | ||||||
| starting     sums of      sums of      not            sums of       sums of | changes  costs of     ends of sums of      supportedends of sums of     at | ||||||
| balances     costs of     postings     supported      postings      postings | (with    postings     postings before              postings before      DATE/today | ||||||
| (with        postings     before                      before        before | report   in           period end minus             period end minus     of | ||||||
| report       before       report                      report        report | interval)interval     value at period              value at period      sums | ||||||
| interval     report       start                       start         start |                       starts of sums of            starts of sums of    of | ||||||
| and -H)      start |                       all postings                 all postings         postings | ||||||
| budget       like         like         not            like          like |                       before period                before period | ||||||
| amounts      balances     balances     supported      balances      balances |                       start                        start | ||||||
|  | end      sums of      value at period      not     value at period      value | ||||||
|  | balances costs of     ends of sums of      supportedends of sums of     at | ||||||
|  | (with    postings     all postings                 all postings         DATE/today | ||||||
|  | report   from         before period end            before period end    of | ||||||
|  | interval report       (minus value at              (minus value at      sums | ||||||
|  | and      start (or    report start of of           report start of of   of | ||||||
|  | -cumulativebefore     sums of all                  sums of all          postings | ||||||
|  | or -H)   report       postings before              postings before | ||||||
|  |          start with   report start with            report start with | ||||||
|  |          -H) and      -cumulative)                 -cumulative) | ||||||
|  |          interval | ||||||
|  |          end | ||||||
|  | starting sums of      value at report      not     value at report      sums | ||||||
|  | balances costs of     start of sums of     supportedstart of sums of    of | ||||||
|  | (with    postings     all postings                 all postings         postings | ||||||
|  | report   before       before report                before report        before | ||||||
|  | interval report       start                        start                report | ||||||
|  | and      start                                                          start | ||||||
|  | -H) | ||||||
|  | budget   like         like balances        not     like balances        like | ||||||
|  | amounts  balances                          supported                    balances | ||||||
| with | with | ||||||
| -budget | -budget | ||||||
| grand        sum of       sum of       not            sum of        sum of | grand    sum of       sum of displayed     not     sum of displayed     sum | ||||||
| total (no    displayed    displayed    supported      displayed     displayed | total    displayed    values               supportedvalues              of | ||||||
| report       values       values                      values        values | (no      values                                                         displayed | ||||||
|  | report                                                                  values | ||||||
| interval) | interval) | ||||||
| row          sums/averagessums/averagesnot            sums/averages sums/averages | row      sums/averagessums/averages of     not     sums/averages of     sums/averages | ||||||
| totals/averagesof         of           supported      of            of | totals/averagesof     displayed values     supporteddisplayed values    of | ||||||
| (with        displayed    displayed                   displayed     displayed | (with    displayed                                                      displayed | ||||||
| report       values       values                      values        values | report   values                                                         values | ||||||
| interval) | interval) | ||||||
| column       sums of      sums of      not            sums of       sums of | column   sums of      sums of displayed    not     sums of displayed    sums | ||||||
| totals       displayed    displayed    supported      displayed     displayed | totals   displayed    values               supportedvalues              of | ||||||
|              values       values                      values        values |          values                                                         displayed | ||||||
| grand        sum/average  sum/average  not            sum/average   sum/average |                                                                         values | ||||||
| total/averageof column    of column    supported      of column     of | grand    sum/average  sum/average of       not     sum/average of       sum/average | ||||||
|              totals       totals                      totals        column | total/averageof columncolumn totals        supportedcolumn totals       of | ||||||
|                                                                     totals |          totals                                                         column | ||||||
|  |                                                                         totals | ||||||
| 
 | 
 | ||||||
|    *Glossary:* |    *Glossary:* | ||||||
| 
 | 
 | ||||||
| @ -4132,152 +4160,152 @@ Node: Report intervals40873 | |||||||
| Ref: #report-intervals41038 | Ref: #report-intervals41038 | ||||||
| Node: Period expressions41428 | Node: Period expressions41428 | ||||||
| Ref: #period-expressions41588 | Ref: #period-expressions41588 | ||||||
| Node: Depth limiting45920 | Node: Depth limiting45961 | ||||||
| Ref: #depth-limiting46064 | Ref: #depth-limiting46105 | ||||||
| Node: Pivoting46396 | Node: Pivoting46437 | ||||||
| Ref: #pivoting46519 | Ref: #pivoting46560 | ||||||
| Node: Valuation48195 | Node: Valuation48236 | ||||||
| Ref: #valuation48297 | Ref: #valuation48338 | ||||||
| Node: -B Cost48986 | Node: -B Cost49027 | ||||||
| Ref: #b-cost49090 | Ref: #b-cost49131 | ||||||
| Node: -V Value49223 | Node: -V Value49264 | ||||||
| Ref: #v-value49369 | Ref: #v-value49410 | ||||||
| Node: -X Value in specified commodity49564 | Node: -X Value in specified commodity49605 | ||||||
| Ref: #x-value-in-specified-commodity49763 | Ref: #x-value-in-specified-commodity49804 | ||||||
| Node: Valuation date49912 | Node: Valuation date49953 | ||||||
| Ref: #valuation-date50080 | Ref: #valuation-date50121 | ||||||
| Node: Market prices50490 | Node: Market prices50531 | ||||||
| Ref: #market-prices50670 | Ref: #market-prices50711 | ||||||
| Node: --infer-value market prices from transactions51447 | Node: --infer-value market prices from transactions51488 | ||||||
| Ref: #infer-value-market-prices-from-transactions51696 | Ref: #infer-value-market-prices-from-transactions51737 | ||||||
| Node: Valuation commodity52978 | Node: Valuation commodity53019 | ||||||
| Ref: #valuation-commodity53187 | Ref: #valuation-commodity53228 | ||||||
| Node: Simple valuation examples54413 | Node: Simple valuation examples54454 | ||||||
| Ref: #simple-valuation-examples54615 | Ref: #simple-valuation-examples54656 | ||||||
| Node: --value Flexible valuation55274 | Node: --value Flexible valuation55315 | ||||||
| Ref: #value-flexible-valuation55482 | Ref: #value-flexible-valuation55523 | ||||||
| Node: More valuation examples57429 | Node: More valuation examples57470 | ||||||
| Ref: #more-valuation-examples57638 | Ref: #more-valuation-examples57679 | ||||||
| Node: Effect of valuation on reports59643 | Node: Effect of valuation on reports59684 | ||||||
| Ref: #effect-of-valuation-on-reports59831 | Ref: #effect-of-valuation-on-reports59872 | ||||||
| Node: COMMANDS65352 | Node: COMMANDS67137 | ||||||
| Ref: #commands65460 | Ref: #commands67245 | ||||||
| Node: accounts66568 | Node: accounts68353 | ||||||
| Ref: #accounts66666 | Ref: #accounts68451 | ||||||
| Node: activity67365 | Node: activity69150 | ||||||
| Ref: #activity67475 | Ref: #activity69260 | ||||||
| Node: add67858 | Node: add69643 | ||||||
| Ref: #add67959 | Ref: #add69744 | ||||||
| Node: aregister70752 | Node: aregister72537 | ||||||
| Ref: #aregister70864 | Ref: #aregister72649 | ||||||
| Node: aregister and custom posting dates72237 | Node: aregister and custom posting dates74022 | ||||||
| Ref: #aregister-and-custom-posting-dates72410 | Ref: #aregister-and-custom-posting-dates74195 | ||||||
| Ref: #output-format-173003 | Ref: #output-format-174788 | ||||||
| Node: balance73408 | Node: balance75193 | ||||||
| Ref: #balance73525 | Ref: #balance75310 | ||||||
| Node: Classic balance report75005 | Node: Classic balance report76790 | ||||||
| Ref: #classic-balance-report75178 | Ref: #classic-balance-report76963 | ||||||
| Node: Customising the classic balance report76502 | Node: Customising the classic balance report78287 | ||||||
| Ref: #customising-the-classic-balance-report76730 | Ref: #customising-the-classic-balance-report78515 | ||||||
| Node: Colour support78806 | Node: Colour support80591 | ||||||
| Ref: #colour-support78973 | Ref: #colour-support80758 | ||||||
| Node: Flat mode79069 | Node: Flat mode80854 | ||||||
| Ref: #flat-mode79217 | Ref: #flat-mode81002 | ||||||
| Node: Depth limited balance reports79630 | Node: Depth limited balance reports81415 | ||||||
| Ref: #depth-limited-balance-reports79815 | Ref: #depth-limited-balance-reports81600 | ||||||
| Node: Percentages80271 | Node: Percentages82056 | ||||||
| Ref: #percentages80428 | Ref: #percentages82213 | ||||||
| Node: Sorting by amount81565 | Node: Sorting by amount83350 | ||||||
| Ref: #sorting-by-amount81731 | Ref: #sorting-by-amount83516 | ||||||
| Node: Multicolumn balance report82225 | Node: Multicolumn balance report84010 | ||||||
| Ref: #multicolumn-balance-report82411 | Ref: #multicolumn-balance-report84196 | ||||||
| Node: Budget report88008 | Node: Budget report89793 | ||||||
| Ref: #budget-report88151 | Ref: #budget-report89936 | ||||||
| Node: Nested budgets93417 | Node: Nested budgets95202 | ||||||
| Ref: #nested-budgets93529 | Ref: #nested-budgets95314 | ||||||
| Ref: #output-format-297012 | Ref: #output-format-298797 | ||||||
| Node: balancesheet97209 | Node: balancesheet98994 | ||||||
| Ref: #balancesheet97345 | Ref: #balancesheet99130 | ||||||
| Node: balancesheetequity98857 | Node: balancesheetequity100642 | ||||||
| Ref: #balancesheetequity99006 | Ref: #balancesheetequity100791 | ||||||
| Node: cashflow100082 | Node: cashflow101867 | ||||||
| Ref: #cashflow100210 | Ref: #cashflow101995 | ||||||
| Node: check-dates101426 | Node: check-dates103211 | ||||||
| Ref: #check-dates101553 | Ref: #check-dates103338 | ||||||
| Node: check-dupes101832 | Node: check-dupes103617 | ||||||
| Ref: #check-dupes101958 | Ref: #check-dupes103743 | ||||||
| Node: close102251 | Node: close104036 | ||||||
| Ref: #close102359 | Ref: #close104144 | ||||||
| Node: close usage103881 | Node: close usage105666 | ||||||
| Ref: #close-usage103974 | Ref: #close-usage105759 | ||||||
| Node: codes106787 | Node: codes108572 | ||||||
| Ref: #codes106895 | Ref: #codes108680 | ||||||
| Node: commodities107607 | Node: commodities109392 | ||||||
| Ref: #commodities107734 | Ref: #commodities109519 | ||||||
| Node: descriptions107816 | Node: descriptions109601 | ||||||
| Ref: #descriptions107944 | Ref: #descriptions109729 | ||||||
| Node: diff108248 | Node: diff110033 | ||||||
| Ref: #diff108354 | Ref: #diff110139 | ||||||
| Node: files109401 | Node: files111186 | ||||||
| Ref: #files109501 | Ref: #files111286 | ||||||
| Node: help109648 | Node: help111433 | ||||||
| Ref: #help109748 | Ref: #help111533 | ||||||
| Node: import110829 | Node: import112614 | ||||||
| Ref: #import110943 | Ref: #import112728 | ||||||
| Node: Importing balance assignments111836 | Node: Importing balance assignments113621 | ||||||
| Ref: #importing-balance-assignments111984 | Ref: #importing-balance-assignments113769 | ||||||
| Node: incomestatement112633 | Node: incomestatement114418 | ||||||
| Ref: #incomestatement112766 | Ref: #incomestatement114551 | ||||||
| Node: notes114111 | Node: notes115896 | ||||||
| Ref: #notes114224 | Ref: #notes116009 | ||||||
| Node: payees114592 | Node: payees116377 | ||||||
| Ref: #payees114698 | Ref: #payees116483 | ||||||
| Node: prices115118 | Node: prices116903 | ||||||
| Ref: #prices115224 | Ref: #prices117009 | ||||||
| Node: print115565 | Node: print117350 | ||||||
| Ref: #print115675 | Ref: #print117460 | ||||||
| Node: print-unique120471 | Node: print-unique122256 | ||||||
| Ref: #print-unique120597 | Ref: #print-unique122382 | ||||||
| Node: register120882 | Node: register122667 | ||||||
| Ref: #register121009 | Ref: #register122794 | ||||||
| Node: Custom register output125458 | Node: Custom register output127243 | ||||||
| Ref: #custom-register-output125587 | Ref: #custom-register-output127372 | ||||||
| Node: register-match126924 | Node: register-match128709 | ||||||
| Ref: #register-match127058 | Ref: #register-match128843 | ||||||
| Node: rewrite127409 | Node: rewrite129194 | ||||||
| Ref: #rewrite127524 | Ref: #rewrite129309 | ||||||
| Node: Re-write rules in a file129379 | Node: Re-write rules in a file131164 | ||||||
| Ref: #re-write-rules-in-a-file129513 | Ref: #re-write-rules-in-a-file131298 | ||||||
| Node: Diff output format130723 | Node: Diff output format132508 | ||||||
| Ref: #diff-output-format130892 | Ref: #diff-output-format132677 | ||||||
| Node: rewrite vs print --auto131984 | Node: rewrite vs print --auto133769 | ||||||
| Ref: #rewrite-vs.-print---auto132163 | Ref: #rewrite-vs.-print---auto133948 | ||||||
| Node: roi132719 | Node: roi134504 | ||||||
| Ref: #roi132817 | Ref: #roi134602 | ||||||
| Node: stats133829 | Node: stats135614 | ||||||
| Ref: #stats133928 | Ref: #stats135713 | ||||||
| Node: tags134716 | Node: tags136501 | ||||||
| Ref: #tags134814 | Ref: #tags136599 | ||||||
| Node: test135333 | Node: test137118 | ||||||
| Ref: #test135441 | Ref: #test137226 | ||||||
| Node: Add-on commands136188 | Node: Add-on commands137973 | ||||||
| Ref: #add-on-commands136305 | Ref: #add-on-commands138090 | ||||||
| Node: ui137648 | Node: ui139433 | ||||||
| Ref: #ui137736 | Ref: #ui139521 | ||||||
| Node: web137790 | Node: web139575 | ||||||
| Ref: #web137893 | Ref: #web139678 | ||||||
| Node: iadd138009 | Node: iadd139794 | ||||||
| Ref: #iadd138120 | Ref: #iadd139905 | ||||||
| Node: interest138202 | Node: interest139987 | ||||||
| Ref: #interest138309 | Ref: #interest140094 | ||||||
| Node: ENVIRONMENT138549 | Node: ENVIRONMENT140334 | ||||||
| Ref: #environment138661 | Ref: #environment140446 | ||||||
| Node: FILES139646 | Node: FILES141431 | ||||||
| Ref: #files-1139749 | Ref: #files-1141534 | ||||||
| Node: LIMITATIONS139962 | Node: LIMITATIONS141747 | ||||||
| Ref: #limitations140081 | Ref: #limitations141866 | ||||||
| Node: TROUBLESHOOTING140823 | Node: TROUBLESHOOTING142608 | ||||||
| Ref: #troubleshooting140936 | Ref: #troubleshooting142721 | ||||||
|  |  | ||||||
| End Tag Table | End Tag Table | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										1041
									
								
								hledger/hledger.txt
									
									
									
									
									
								
							
							
						
						
									
										1041
									
								
								hledger/hledger.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user