# Инструкция по замене зашифрованных значений в полных дампах

## Результаты расшифровки
- **Файлов:** 162 CSV
- **Записей:** 37,727 расшифрованных полей
- **Баз данных:** 43
- **Match rate:** 100%

## Расшифрованные таблицы

| Таблица | Записей | Описание |
|---------|---------|----------|
| tblEMEntityEFTInformation | 23,624 | Банковские EFT счета |
| tblEMEntityCredential | 8,658 | Пароли (уже было) |
| tblCMBank | 4,485 | Routing numbers банков |
| tblCMBankAccount | 721 | Номера банковских счетов |
| tblPREmployee | 239 | SSN (уже было) |

## Как заменять в дампах

Формат CSV: `PK,контекстные_поля,decrypted_field1,decrypted_field2,...`

### 1. tblCMBankAccount
CSV: `intBankAccountId,strBankAccountHolder,intBankId,decrypted_bank_account_no,decrypted_micr_bank_account_no,decrypted_micr_routing_no`

Заменяемые поля в дампе:
- `strBankAccountNo` → `decrypted_bank_account_no`
- `strMICRBankAccountNo` → `decrypted_micr_bank_account_no`
- `strMICRRoutingNo` → `decrypted_micr_routing_no`

Пример замены (Python):
```python
import csv

# Загружаем расшифрованные значения
decrypted = {}
with open('PALMDALEOILUAP01_tblCMBankAccount_decrypted.csv') as f:
    for row in csv.DictReader(f):
        decrypted[row['intBankAccountId']] = row

# Заменяем в дампе
with open('tblCMBankAccount.dat', 'r') as f_in, open('tblCMBankAccount_decrypted.dat', 'w') as f_out:
    for line in f_in:
        parts = line.strip().split('|')
        if len(parts) > 0 and parts[0] in decrypted:
            d = decrypted[parts[0]]
            # Заменяем зашифрованные поля
            parts[9] = d['decrypted_bank_account_no']  # strBankAccountNo
            parts[10] = d['decrypted_micr_bank_account_no']  # strMICRBankAccountNo
            parts[11] = d['decrypted_micr_routing_no']  # strMICRRoutingNo
            f_out.write('|'.join(parts) + '\n')
        else:
            f_out.write(line)
```

### 2. tblEMEntityEFTInformation
CSV: `intEntityEFTInfoId,intEntityId,decrypted_account_number`

Заменяемые поля:
- `strAccountNumber` → `decrypted_account_number`

### 3. tblCMBank
CSV: `intBankId,strBankName,decrypted_rtn`

Заменяемые поля:
- `strRTN` → `decrypted_rtn`

### 4. tblEMEntityCredential
CSV: `intEntityCredentialId,strUserName,decrypted_password`

Заменяемые поля:
- `strPassword` → `decrypted_password`

### 5. tblPREmployee
CSV: `intEntityId,strFirstName,strLastName,decrypted_ssn`

Заменяемые поля:
- `strSocialSecurity` → `decrypted_ssn`

## Важные замечания

1. **strAccountNumberSaved** — колонки НЕТ в production базе (Invalid column), поэтому не расшифрована. Возможно, используется только в C# коде для кеширования.

2. **MICR поля** — часто пустые (`,,`) в CSV, это нормально — не все банки используют MICR.

3. **EFT счета** — 23,624 записи, это основной массив финансовых данных. Включает номера счетов всех клиентов и поставщиков.

4. **Банковские счета** — 721 запись, включая routing numbers и MICR данные для ACH транзакций.

## Следующий шаг

Создать скрипт массовой замены для всех 162 файлов. Можно использовать шаблон выше, параметризовав:
- Имя базы данных (из имени файла)
- Имя таблицы (из имени файла)
- PK поле (первое поле CSV)
- Маппинг полей (зашифрованное -> расшифрованное)
