'Statement', 'columns' => 'Columns', 'review' => 'Review']; ?>
$label) { $i++; $done = array_search($key, array_keys($steps)) < array_search($step, array_keys($steps)); ?> 1) { ?> ' : $i . '. ' ?> · Start over
is part way through - nothing from it is imported yet. Carry on with it

Import Statement

The CSV your bank or card's website exports - often under Download, Export or Activity. Up to lines.

How it goes

  • The columns are worked out for you - check them once, and the next statement from the same account goes straight to the review.
  • Each line is matched to a vendor: what you picked for that merchant last time, or one of your vendors whose name is in it. A new vendor can be made from the line's text.
  • Lines brought in before, and ones with the same amount as an expense entered by hand within days, are left out unless you tick them.
  • Payments to the card and other money in are left out unless you tick them - then they come in as money back.
  • Nothing is imported until you press Import on the review.
merchant remembered See them
0, 'imported' => 0, 'entered' => 0, 'money_in' => 0, 'problem' => 0, 'matched' => 0]; foreach ($lines as $i => $line) { $state = $line['problem'] !== '' ? 'problem' : ($line['imported'] ? 'imported' : ($line['entered'] ? 'entered' : ($line['amount'] < 0 ? 'money_in' : 'new'))); $lines[$i]['state'] = $state; $count[$state]++; $count['matched'] += $state === 'new' && $line['vendor_id'] ? 1 : 0; } $vendor_options = ''; foreach ($vendors as $vendor_id => $vendor) { $vendor_options .= ''; } $category_options = ''; foreach ($categories as $category_id => $category) { $category_options .= ''; } $client_options = ''; foreach ($clients as $client_id => $client_name) { $client_options .= ''; } $states = [ 'new' => ['label' => 'New', 'tone' => 'primary'], 'imported' => ['label' => 'Imported before', 'tone' => 'secondary'], 'entered' => ['label' => 'Entered already?', 'tone' => 'warning'], 'money_in' => ['label' => 'Money in', 'tone' => 'success'], 'problem' => ['label' => "Can't read", 'tone' => 'danger'], ]; ?>
New charges
matched to a vendor
Already in
imported before · look entered
Money in
Payments and refunds - left out · Bring them in as income
Columns
Change them' . $count['problem'] . " can't be read" : '' ?>

The lines

0; $fixed = in_array($state, ['imported', 'problem'], true); $vendor_value = $line['vendor_id'] ? (string) $line['vendor_id'] : 'new'; ?> class="">
Date On the statement Amount Vendor Category Client
aria-label="Import this line">
?' ?>
-' ?>
Open it as last time by name #
>