---
title: "Migrating from imf.data 0.1.x"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Migrating from imf.data 0.1.x}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)
```

Version 0.2.0 is a breaking release. The IMF retired the JSON service used by
`imf.data` 0.1.x and replaced it with SDMX APIs whose identifiers, structures,
and response model differ from the old service.

## Function mapping

| Version 0.1.x | Version 0.2.0 |
|---|---|
| `list_datasets()` | `list_datasets()` with a new tidy schema |
| `load_datasets(id)` | `list_dimensions(id)` |
| `dataset$dimensions` | `list_dimension_values(id, dimension)` |
| `dataset$get_series(...)` | `get_data(id, filters = list(...))` |
| `mt_dataflow()` | `sdmx_structure("dataflow")` |
| `mt_data_structure()` | `sdmx_structure("datastructure")` |
| `mt_compact_data()` | `sdmx_data()` |

There are no compatibility wrappers because old dataset IDs and dimension
names do not consistently map to the new IMF Data Portal.

## Rewrite a query

An old query created a dataset object and then called its generated
`get_series()` method:

```{r}
CPI <- load_datasets("CPI")
CPI$get_series(
  freq = "M",
  ref_area = "US",
  indicator = "PCPI_IX"
)
```

The new workflow first inspects the current dimensions, then uses their SDMX
names directly:

```{r}
list_dimensions("CPI")

get_data(
  "CPI",
  filters = list(
    COUNTRY = "USA",
    INDEX_TYPE = "CPI",
    COICOP_1999 = "_T",
    TYPE_OF_TRANSFORMATION = "IX",
    FREQUENCY = "M"
  )
)
```

Important identifier changes include three-letter country codes such as `USA`
instead of the previous `US`, and dataset-specific dimension layouts.

## Migrate safely

1. Find the current dataflow with `list_datasets()`.
2. Inspect its dimensions with `list_dimensions()`.
3. Validate codes with `list_dimension_values()`.
4. Replace positional or generated arguments with a named `filters` list.
5. Check the returned columns and units before replacing production results.

The IMF Data Portal is the source of truth for current dataflow definitions and
vintages.
