# Changelog of FGCMPI Scraper (fgcmpi.org.dz) (`hamza325/fgcmpi-scraper`) Actor

- **URL**: https://apify.com/hamza325/fgcmpi-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/hamza325/fgcmpi-scraper.md

## Changelog

All notable changes to the FGCMPI Scraper are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

### 0.1.2

#### Fixed

- Warn when a listing page carries no project card. A filter that matches
  nothing and a page whose markup changed both produced an empty dataset with
  exit code 0 and no explanation; the log now names the page and the cause.
- Stop spending a second listing page when the row cap fits on page 1
  (`maxItems` ≤ cards per page). The extra page absorbed cross-page duplicates
  only when the cap actually spans pages.

### 0.1.1

#### Added

- Offline Vitest suite covering the input validation, the listing/detail/
  register parsers, the crawl engine and the Actor metadata.
- Local and Apify smoke-test runners with a shared flow: projects with and
  without details, a wilaya filter discovered from the first step, and the
  affiliation register.
- Schema validation against Apify's official schemas (`npm run lint`).
- GitHub Actions CI: install, typecheck, schema validation, tests and build.
- Fixture extraction from a HAR capture (`scripts/extract-fixtures.mjs`).

#### Fixed

- Collapse every run of whitespace in parsed text, not only the first one.
- Decode the HTML entities (`&#039;`, `&amp;`, `&quot;`…) printed in the
  affiliation register's cells.
- Read pagination links in both their `&amp;page=` and `?page=` forms.

### 0.1.0

Initial release.

#### Added

- One register per run, selected by **What to scrape** (`startMode`):
  `projects` for guaranteed housing projects, `developers` for the
  affiliation register.
- Project filters for promoter, title, wilaya and housing programme
  (PL / LSP / LPA).
- Optional full project records with guarantee dates, insurance policy
  number, registered office, status, construction type and housing
  breakdown.
- Developer rows with affiliation, agrément and TNPI numbers, company
  name, manager, registered office, phone and wilaya.
- Run controls for row count, result pages, concurrency, rate limit and
  retries, with a default cap of 200 rows per run.
- Rows are pushed while the crawl runs, so results appear without waiting
  for every listing page to finish.
- Projects whose full record cannot be read keep their summary row;
  `detailStatus` explains why.
- Spreadsheet-safe text cells, so CSV and Excel exports treat values as
  text rather than formulas.
