- Display name
- Sony Music Publishing
- Key
- SONY_PUB
- Rights layer
- Composition
- File format
- XLSX
- Default currency
- USD
- Source kind
- PUBLISHER
- Notes
- CS04 royalty statement. The preamble states "Result: N record(s)" — cross-check that N against parsed_row_count after import, since stop_at_empty truncates at the first fully blank row inside the range.
Configuration
Edit configurationExtraction query
Edit queryReads XLSXUpdated 07/12/2026
-- Sony Music Publishing CS04 statement -> normalized schema
SELECT
row_number() OVER () AS line_number,
trim("Song") AS song_title,
upper(trim("Song")) AS song_title_key,
COALESCE(NULLIF(upper(trim("Src4 Nm")), ''),
NULLIF(upper(trim("Src3 Nm")), ''),
NULLIF(upper(trim("Src2 Nm")), ''),
upper(trim("Src Nm"))) AS source_name_key,
upper(trim("Inc Typ")) AS income_class_key,
upper(trim("Inc Typ")) AS right_type_key,
COALESCE(NULLIF(upper(trim("Src4Ctry")), ''),
NULLIF(upper(trim("Src3Ctry")), ''),
NULLIF(upper(trim("Src2Ctry")), ''),
upper(trim("Src Ctry"))) AS territory_raw,
trim("Writer") AS writer_name,
TRY_CAST("Units" AS DECIMAL(14,2)) AS units,
TRY_CAST("SngShr%" AS DECIMAL(9,6)) AS share_percentage,
TRY_CAST("RoyAmt" AS DECIMAL(18,4)) AS amount_raw,
FALSE AS adjustment,
CAST(try_strptime(substr(COALESCE(NULLIF(trim("Sales Pd"), ''),
trim("Rpt'g Pd")), 1, 4), '%m%y') AS DATE) AS earning_date,
NULLIF(upper(trim("ISWC Cd")), '') AS iswc,
NULLIF(upper(trim("ISRC")), '') AS isrc,
'USD' AS currency,
to_json(row) AS source_row
FROM read_xlsx('{{file}}',
header = true,
all_varchar = true,
stop_at_empty = true,
range = 'A10:AD1048576') AS row;
Raw row count query — overrides the generic reader for the integrity check
SELECT COUNT(*) AS raw_count FROM read_xlsx('{{file}}', header = true, all_varchar = true, stop_at_empty = true, range = 'A10:AD1048576');Territory resolution
Edit overridesterritory_raw is resolved to an ISO 3166-1 alpha-2 code in code via a country lookup — not with rules. Values the lookup can't resolve (historical territories, regional groupings) fall back to this override table.
No overrides yet. Every territory value so far resolves through the country lookup.
Normalization rules
Edit rulesThis source's own rules, grouped by the attribute each writes. First match wins, top to bottom; conditions within a rule are ANDed. Each group ends in a pinned catch-all.
Stage 1 — Raw match keys to standard enums
income_channel_std
26 rules1STREAMING_AUDIOincome_class_key ~ STRMMECH*
2STREAMING_AUDIOincome_class_key ~ STRMPRF*
3STREAMING_AUDIOincome_class_key ~ MSTRMMCH*
4DOWNLOADincome_class_key ~ DPDMECH*
5DOWNLOADincome_class_key ~ MDPDMECH*
6PHYSICALincome_class_key ~ PHY?MECH*
7RINGTONESincome_class_key ~ MRNGTN*
8RINGTONESincome_class_key ~ MRNGBK*
9STREAMING_VIDEOincome_class_key ~ ISYNC*
10TVincome_class_key ~ STV*
11VIDEO_GAMESincome_class_key ~ SVIDGM*
12ADVERTISINGincome_class_key ~ SCOMM*
13ADVERTISINGincome_class_key ~ SPRO/TRA*
14HOME_VIDEOincome_class_key ~ SYNCVID*
15LIVEincome_class_key ~ STH/LIV*
16SYNC_GENERALincome_class_key ~ SYNC*
17LYRICSincome_class_key ~ ILYRCRPT*
18LYRICS_PRINTincome_class_key ~ LYRCRPT*
19SHEET_MUSIC_DIGITALincome_class_key ~ ISHEETMU*
20SHEET_MUSIC_DIGITALincome_class_key ~ ITAB*
21SHEET_MUSICincome_class_key ~ SHEETMUS*
22KARAOKE_DIGITALincome_class_key ~ IKAROKE*
23KARAOKEincome_class_key ~ KAROKE*
24KARAOKEincome_class_key ~ SKARMEC*
25BROADCAST_MECHANICALincome_class_key ~ MECHPERF*
26OTHERincome_class_key ~ OTHER*
Catch-allUNCLASSIFIEDMatches every line not caught above.
right_type_std
25 rules1MECHANICALright_type_key ~ STRMMECH*
2MECHANICALright_type_key ~ MSTRMMCH*
3MECHANICALright_type_key ~ DPDMECH*
4MECHANICALright_type_key ~ MDPDMECH*
5MECHANICALright_type_key ~ PHY?MECH*
6MECHANICALright_type_key ~ MRNGTN*
7MECHANICALright_type_key ~ MRNGBK*
8MECHANICALright_type_key ~ KAROKE*
9MECHANICALright_type_key ~ IKAROKE*
10MECHANICALright_type_key ~ SKARMEC*
11MECHANICALright_type_key ~ MECHPERF*
12PERFORMANCEright_type_key ~ STRMPRF*
13SYNCright_type_key ~ ISYNC*
14SYNCright_type_key ~ STV*
15SYNCright_type_key ~ SVIDGM*
16SYNCright_type_key ~ SCOMM*
17SYNCright_type_key ~ SPRO/TRA*
18SYNCright_type_key ~ STH/LIV*
19SYNCright_type_key ~ SYNC*
20PRINTright_type_key ~ ILYRCRPT*
21PRINTright_type_key ~ LYRCRPT*
22PRINTright_type_key ~ ISHEETMU*
23PRINTright_type_key ~ ITAB*
24PRINTright_type_key ~ SHEETMUS*
25OTHERright_type_key ~ OTHER*
Catch-allUNCLASSIFIEDMatches every line not caught above.
Stage 2 — Standard enums to derived values
is_digital
6 rules1truenormalized_income_channel ~ STREAMING_*
2truenormalized_income_channel ~ DOWNLOAD
3truenormalized_income_channel ~ RINGTONES
4truenormalized_income_channel ~ LYRICS
5truenormalized_income_channel ~ SHEET_MUSIC_DIGITAL
6truenormalized_income_channel ~ KARAOKE_DIGITAL
Catch-allfalseMatches every line not caught above.
is_performance
1 rule1truenormalized_right_type ~ PERFORMANCE
Catch-allfalseMatches every line not caught above.