```ts
import { strict as assert } from 'assert';

export function netTally(sheets: string[]): string {
    if (!Array.isArray(sheets)) {
        throw new Error('sheets argument must be a list');
    }

    const report = [];
    let totalNet = 0;

    for (const sheet of sheets) {
        if (typeof sheet !== 'string') {
            throw new Error('sheet argument must be a string');
        }

        const rows = sheet.split('\n').filter(row => row.trim() !== '');

        for (const row of rows) {
            const fields = row.split('|').map(field => field.trim());
            if (fields.length !== 3) {
                throw new Error('row must have exactly three fields');
            }

            const itemName = fields[0];
            const sold = parseFloat(fields[1]);
            const returned = parseFloat(fields[2]);

            if (itemName === '') {
                throw new Error('item name cannot be empty');
            }

            if (isNaN(sold) || isNaN(returned)) {
                throw new Error('sold and returned fields must be strings of decimal digits');
            }

            if (returned > sold) {
                throw new Error('returned total cannot exceed sold total');
            }

            const net = sold - returned;
            report.push(`${itemName.padEnd(Math.max(...report.map(item => item.length)), ' ')}  ${net}`);
            totalNet += net;
        }
    }

    report.push(`${report.map(item => item.length).reduce((a, b) => Math.max(a, b), 0)}  ${totalNet}`);

    return report.join('\n');
}

// Check function to verify the correctness of the solution
function checkNetTally() {
    assert.strictEqual(netTally([]), '');
    assert.strictEqual(netTally(['']), '');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5\nitem7|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\nitem7  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5\nitem7|10|5\nitem8|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\nitem7  0  0\nitem8  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5\nitem7|10|5\nitem8|10|5\nitem9|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\nitem7  0  0\nitem8  0  0\nitem9  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5\nitem7|10|5\nitem8|10|5\nitem9|10|5\nitem10|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\nitem7  0  0\nitem8  0  0\nitem9  0  0\nitem10  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5\nitem7|10|5\nitem8|10|5\nitem9|10|5\nitem10|10|5\nitem11|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\nitem7  0  0\nitem8  0  0\nitem9  0  0\nitem10  0  0\nitem11  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|10|5\nitem2|5|10\nitem1|5|5\nitem3|10|5\nitem4|10|5\nitem5|10|5\nitem6|10|5\nitem7|10|5\nitem8|10|5\nitem9|10|5\nitem10|10|5\nitem11|10|5\nitem12|10|5']), 'item1  0  0\nitem2  0  0\nitem1  0  0\nitem3  0  0\nitem4  0  0\nitem5  0  0\nitem6  0  0\nitem7  0  0\nitem8  0  0\nitem9  0  0\nitem10  0  0\nitem11  0  0\nitem12  0  0\n  0  0');
    assert.strictEqual(netTally(['item1|1