---
title: Leaving Batigest without losing five years of data
description: 'Leaving Batigest for custom software: full export, verified archive,
  migration in layers, rehearsals and recount. What each step turned up along the
  way.'
url: https://sxnlabs.com/en/programming/2026/11/05/quitter-batigest-sans-perdre-ses-donnees/
lang: en
date: '2026-11-05T09:00:00+01:00'
tags:
- Data migration
- Batigest
- Business software
---

# Leaving Batigest without losing five years of data

A 23-person construction company is leaving Batigest, a French quoting and invoicing package, for software written for it. Over five years it built up 1,075 customers, 421 job sites, a catalog of 1,776 items, 2,642 quotes and 2,623 invoices. An owner in that position first wonders what they will lose. Here, nothing, because the migration followed a strict order. These are the steps, and what each one turned up.

## Get the whole database, not the export screen

The first export came from the screen Batigest provides for it: twelve Excel files covering customers, job sites, quotes, invoices and suppliers. Opening them, the essential part was missing. Quotes and invoices only had their header (number, customer, date, totals), without a single detail line, and assemblies had no breakdown.

A second extraction was needed, from a full backup of the Batigest database: 253 tables, including more than 600,000 quote and invoice lines. Even then the data carried flaws invisible on screen. 320 empty dates were stored as December 30, 1899, and 11,096 cells contained invisible characters. Better to find that before the import than halfway through it.

## Archive everything before sorting

Before deciding what to carry over, every line of every file was copied into an archive: 26 files, 764,587 lines. The archive is checked against the source cell by cell, with no discrepancy, and stays available in the new software, with search across its whole content.

That archive changes how decisions get made. Orders, supplier invoices and the staff records aren't brought into the software, but they aren't lost either. If the company ever needs them, the data is there, verified.

## Carry it over in layers

A quote refers to a customer, a job site and catalog items. If those don't exist yet in the new software, it can't be imported. So the migration follows the order of dependencies: customers, then job sites, subcontractors, the catalog, and last the quotes and invoices.

Each layer needed its own decisions. Batigest doesn't clearly tell a company from an individual. The SIRET number and the title were enough to classify 1,018 of them, and 57 customers without a SIRET came over as individuals, to be checked. 123 records share 57 names, likely duplicates the company will sort out itself. In the catalog, 48 items with an ambiguous VAT rate were set aside instead of being imported with a guessed rate.

## Decide what stays frozen

An imported quote or invoice remains the document the customer received. Nothing is reissued, no new number, no e-invoice, no email, and totals stay the Batigest ones. A quote that was signed, completed or refused is frozen. A quote still in progress can be resent and signed in the new software, but its prices no longer move. Recomputing them from the lines gave different amounts from the ones the customer had read.

For invoices, the first decision was to archive them all, because the export supposedly had "no payment information". That was wrong, since the "Reste à payer" (balance due) column is payment information. 164 invoices still had a balance on the export date. Archived, they would have dropped out of receivables, and nobody would have chased them. So they stay open, with their balance.

<figure class="schema">
  <img width="1000" height="470" src="/images/posts/reprise-batigest/figes-et-vivants.en.svg" alt="How imported documents are split: of 2,642 quotes, 1,209 signed, completed or refused stay frozen and 1,433 in progress, pending or under revision stay open; of 2,623 invoices, 2,459 are archived and 164 with a balance due stay sent." />
  <figcaption>The Batigest status decides what each imported document becomes.</figcaption>
</figure>

The criterion behind that sorting matters as much as the sorting. The software exempted any quote coming from Batigest from the reduced VAT certification, as if it were history. A quote still waiting for a signature, at 10%, was therefore rejected at signing. The criterion is now the Batigest status, and only quotes already signed, completed or refused are exempt.

## Rehearse on a copy

Before touching production, the import ran on copies from July to October, and nearly every pass found something. An Excel file was read as a text file. Credit notes, exported as negative invoices, were rejected. 33 quotes had a customer different from their job site's, and unknown VAT codes blocked the catalog. None of those problems reached production.

## Switch over, then recount

The history, from customers to the catalog, was switched over one evening in September. The application was frozen for a few minutes, and the old database stayed in place in case of a rollback. Quotes and invoices followed in early October.

After each switch, everything was recounted against the source. 1,075 customers and 421 job sites, with no discrepancy. 2,642 quotes, with totals identical to the cent. 2,622 invoices out of 2,623: the missing one holds a value the database refuses, and it stays in the archive until it is carried over.

## What is left to do

Some documents fit no box. 33 quotes and 303 invoices point to a job site or quote belonging to another customer. They are imported under their original customer, without that link, and the company gets the list to reattach them. 423 open quotes fail a consistency check on their totals and can't be sent for signature yet.

Above all, there is the gap between the export and the switch. The export dates from June, and the company has kept working in Batigest since. Invoices issued in the meantime aren't in the new software, and balances are June's. Right before the teams switch, a new full export will be taken and the import replayed on it, with the same recount. That is what the rehearsals are also for: the import has already run on several copies, and it will run one last time on that export.

If you are switching business software, ask your provider these questions before you start:

- Do you start from the export screen or from the full database?
- What happens to what isn't carried over?
- How many rehearsals before production, and on which data?
- How do you recount after the import?
- What happens to documents created between the export and the switch?
