# GERENCIAR PACOTES BAGIT v2

<details id="bkmrk-criar-pacotes-bagits"><summary>CRIAR PACOTES BAGITS POR DATASETS</summary>

```
sudo su - glassfish
curl -H X-Dataverse-key:$API_TOKEN  http://localhost:8080/api/datasets/:persistentId/?persistentId=doi:10.48331/SCIELODATA.RJ1HZO
export ID=19300
export API_TOKEN='YOUR API TOKEN'
curl -X POST -H "X-Dataverse-key: $API_TOKEN" http://localhost:8080/api/admin/submitDatasetVersionToArchive/$ID/1.0
```

</details><details id="bkmrk-criar-pacotes-bagits-1"><summary>CRIAR PACOTES BAGITS DE TODOS OS DATASETS</summary>

Essa execução é feito uma vez por mês. Os pacotes bagits são gerados no diretório /preservacao/dataverse que é um ponto de montagem nfs em storage-scielo-232.scielo.org:/archivematica\_transfersource

Antes de executar crie a pasta correspondente ao mês:

```
mkdir /preservacao/dataverse/exportacao-mes-ano/
Exemplo:
mkdir /preservacao/dataverse/exportacao-agosto-2026/

cd /preservacao/dataverse/exportacao-agosto-2026/
```

Depois de entrar na pasta:

```
export API_TOKEN='MEU TOKEN'
curl -X POST -H "X-Dataverse-key: $API_TOKEN" 'http://localhost:8080/api/admin/archiveAllUnarchivedDatasetVersions'
```

Uma vez que os pacotes são gerados precisamos organizar cada um dos datasets em pastas individuais. Para isso precisamos executar o script [processar-dataverse.sh](https://gist.githubusercontent.com/rondinelisaad/c8ef9659dc6cf801c9e5a469645a8b14/raw/99fd3396e41616639ec3226c4cc76a1ee6397f94/processar-dataverse.sh)

```
cd /preservacao/dataverse
sh -x processar-dataverse.sh <mes> <ano> /preservacao/dataverse/exportacao-mes-ano/
Exemplo:
./processar-dataverse.sh agosto 2026 /preservacao/dataverse/exportacao-agosto-2026/
```

Ele criará automaticamente:

```
/preservacao/dataverse/scielodata-agosto-2026/
```

 e ao final, algo como:

```
scielodata-agosto-2026/
├── relatorio-processamento.txt
├── scielodata-agosto-2026-01/
│   ├── doi-10-48331-scielodata-0ppvrc/
│   │   └── doi-10-48331-scielodata-0ppvrc.v1.0/
│   │       ├── doi-10-48331-scielodata-0ppvrc.v1.0.zip
│   │       └── doi-10-48331-scielodata-0ppvrc_datacite.v1.0.xml
│   │
│   ├── doi-10-48331-scielodata-wrtkuf/
│   │   ├── doi-10-48331-scielodata-wrtkuf.v1.0/
│   │   │   ├── doi-10-48331-scielodata-wrtkuf.v1.0.zip
│   │   │   └── doi-10-48331-scielodata-wrtkuf_datacite.v1.0.xml
│   │   └── doi-10-48331-scielodata-wrtkuf.v1.1/
│   │       ├── doi-10-48331-scielodata-wrtkuf.v1.1.zip
│   │       └── doi-10-48331-scielodata-wrtkuf_datacite.v1.1.xml
│   │
│   └── ...
│
├── scielodata-agosto-2026-02/
│   └── ...
│
└── scielodata-agosto-2026-03/
    └── ...
```

</details><details id="bkmrk-troubleshooting-vers"><summary>TROUBLESHOOTING</summary>

<details><summary>Version was already submitted for archiving.</summary>

Quando você envia para criar o pacote em uma data versão, não é possível criar o mesmo sem uma intervenção. O erro que dá é:

```
{"status":"ERROR","message":"Version was already submitted for archiving."}
```

Para enviar novamente siga os passos:

```
sudo su - postgres
\c dvndb
SELECT 
    id, versionnumber, minorversionnumber, versionstate, 
    archivetime, archivalcopylocation, externalstatuslabel, archivenote
FROM datasetversion
WHERE dataset_id = '13150'
ORDER BY versionnumber DESC, minorversionnumber DESC;
```

Veja que o resultado foi:

[![image.png](https://documentacao.scielo.org/uploads/images/gallery/2025-08/scaled-1680-/oWcTchrLr3VGVAFL-image.png)](https://documentacao.scielo.org/uploads/images/gallery/2025-08/oWcTchrLr3VGVAFL-image.png)

Vamos agora atualizar o registro para limpar esta mensagem:

```
UPDATE datasetversion
SET archivetime = NULL,
    archivalcopylocation = NULL,
    externalstatuslabel = NULL,
    archivenote = NULL
WHERE id = 2209;
```

Resultado:

[![image.png](https://documentacao.scielo.org/uploads/images/gallery/2025-08/scaled-1680-/RfNipaKWwfVkoscm-image.png)](https://documentacao.scielo.org/uploads/images/gallery/2025-08/RfNipaKWwfVkoscm-image.png)

Agora vamos executar novamente o comando:

```
sudo su - glassfish
export ID=13150
export API_TOKEN='minha api'
curl -X POST -H "X-Dataverse-key: $API_TOKEN" http://localhost:8080/api/admin/submitDatasetVersionToArchive/$ID/1.0
```

Outra forma para limpar é:

```
export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export SERVER_URL=https://demo.dataverse.org
export PERSISTENT_IDENTIFIER=doi:10.5072/FK2/7U7YBV
export VERSION=1.0

curl -H "X-Dataverse-key: $API_TOKEN" -X DELETE "$SERVER_URL/api/datasets/:persistentId/$VERSION/archivalStatus?persistentId=$PERSISTENT_IDENTIFIER"
```

Link: [https://guides.dataverse.org/en/latest/api/native-api.html#delete-the-archival-status-of-a-dataset-by-version](https://guides.dataverse.org/en/latest/api/native-api.html#delete-the-archival-status-of-a-dataset-by-version)

</details><details><summary>Erro {"status":"failure","message":"Bag not transferred"}</summary>

Este erro aconteceu quando eu tentei criar os bagit e o usuário não tinha permissão para escrever no diretório /preservacao/dataverse. Uma vez que deu erro alguns pacotes ficaram com o status : {"status":"failure","message":"Bag not transferred"}

✅ 1️⃣ Primeiro: verifique antes de atualizar (modo seguro)

Antes de alterar qualquer coisa, rode este <span class="s1">SELECT</span> para confirmar exatamente <span class="s2">**quais registros serão afetados**</span>:

```
SELECT 
    id, dataset_id, versionnumber, versionstate, archivetime, archivalcopylocation
FROM datasetversion
WHERE archivalcopylocation::text LIKE '%"Bag not transferred"%';
```

💡 Isso lista <span class="s1">**apenas as versões com erro de arquivamento**</span>, garantindo que você não vai limpar dados corretos.

✅ 2️⃣ Atualização segura (modo em lote)

Depois de confirmar, execute:

```
UPDATE datasetversion
SET 
    archivetime = NULL,
    archivalcopylocation = NULL,
    externalstatuslabel = NULL,
    archivenote = NULL
WHERE archivalcopylocation::text LIKE '%"Bag not transferred"%';
```

🔹 Esse comando:

- <span class="s1">**limpa os campos de arquivamento**</span> que ficaram marcados com erro,
- sem afetar versões bem-sucedidas ou DRAFTs normais.

Feito isso, faço novamente o processo de criação dos pacotes.

</details></details>