presseportale/database/migrations
Kevin Adametz a0ac32cf95 companies: Adress-Klassifizierung persistieren (Roadmap 1a.2, E1 = 3)
Die Klassifizierung aus dem Trockenlauf wird jetzt nach company_email_groups
geschrieben — eine Zeile je Adresse, denn ob zusammengeführt werden darf, ist
eine Eigenschaft der Adresse und nicht der Firma. Die Zusammenführung (1a.3)
und die laufende Zuordnung neuer API-Meldungen (1a.4) lesen dort, statt den
Trockenlauf jedes Mal neu zu rechnen.

Die Logik liegt jetzt in CompanyAddressClassifier und wird von Bericht und
Persistierung gleichermaßen benutzt. Beide müssen dieselbe Antwort geben —
sonst zeigt der Bericht etwas anderes, als die Zusammenführung später tut.

manual_classification übersteuert die berechnete Klasse und überlebt jede
Neuberechnung. Nötig für Grenzfälle, die nur ein Mensch entscheiden kann:
presse@pr4you.de ist eine echte Agentur, sieht in den Daten aber aus wie eine
Wegwerfadresse. effectiveClassification() ist die einzige Stelle, die
Abnehmer fragen dürfen.

Eigene Tabelle statt Spalten auf companies: Die Tabelle trägt einen
FULLTEXT-Index, jedes ADD COLUMN dort ist ein Rebuild. Die Zuordnung Firma →
Gruppe ist ohnehin nur die normalisierte Adresse, und die eine Stelle, die
festlegt, was "dieselbe Adresse" heißt, ist jetzt Company::emailKey().

E1 ist entschieden: Schwellwert 3, nach drei Live-Läufen. Bei 2 wird jede
zweite Schreibweise zur "Agentur", bei 4 wandern echte Mehrkunden-Adressen in
die Handarbeit. Konfiguriert in config/newsroom.php; Bericht und
Klassifizierung lesen den Wert von dort.

Die Ähnlichkeitsprüfung ist quadratisch und jetzt bei 25 Repräsentanten
gedeckelt — ab da steht die Klasse fest, und yahoo@yahoo.com mit über 4000
Namen hätte sonst neun Millionen Levenshtein-Aufrufe gekostet. Laufzeit über
den ganzen Bestand: 25 s → 3 s, Ergebnis unverändert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-11 09:11:09 +00:00
..
0001_01_01_000000_create_users_table.php first commit 2025-10-20 17:53:02 +02:00
0001_01_01_000001_create_cache_table.php first commit 2025-10-20 17:53:02 +02:00
0001_01_01_000002_create_jobs_table.php first commit 2025-10-20 17:53:02 +02:00
2025_07_21_124334_add_two_factor_columns_to_users_table.php first commit 2025-10-20 17:53:02 +02:00
2025_07_21_124345_create_personal_access_tokens_table.php first commit 2025-10-20 17:53:02 +02:00
2026_04_23_163135_expand_users_table_for_migration_2026.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_163251_create_permission_tables.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_163305_create_magic_links_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_163305_create_profiles_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_164018_create_companies_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_164018_create_company_user_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_164018_create_contacts_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_170557_create_categories_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_170557_create_category_translations_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_171000_create_press_releases_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_171001_create_press_release_images_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_171002_create_press_release_contact_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_172142_create_newsletter_subscriptions_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_174502_create_billing_addresses_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_174502_create_invoice_billing_addresses_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_174844_create_payment_options_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_174846_create_payment_option_translations_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_175304_create_user_payment_options_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_175305_create_user_payment_option_company_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_175306_create_user_payments_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_175631_create_invoices_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_175632_create_legacy_invoices_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_23_175633_create_legacy_import_map_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_24_120000_create_user_filter_presets_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_24_183000_create_contact_user_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_27_115212_expand_phone_fax_columns.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_28_142555_create_admin_presets_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_29_132601_create_api_usage_logs_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_29_132809_add_admin_performance_indexes.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_04_29_140616_add_admin_search_fulltext_indexes.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_05_04_112430_create_footer_codes_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_05_04_115118_create_press_release_status_logs_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_05_04_122603_add_legacy_pdf_payload_to_legacy_invoices_table.php 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
2026_05_20_143424_add_boilerplate_to_companies.php create PM v0.5 2026-05-20 19:14:39 +02:00
2026_05_20_143424_add_phase7_fields_to_press_releases.php create PM v0.5 2026-05-20 19:14:39 +02:00
2026_05_20_143424_create_press_release_attachments_table.php create PM v0.5 2026-05-20 19:14:39 +02:00
2026_05_21_180700_add_customer_press_kit_index_performance_indexes.php 22-05-2026 Optimierung der User und Admin Panels 2026-05-22 11:18:59 +02:00
2026_05_29_130110_add_placeholder_variant_to_press_releases.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_05_29_130849_add_license_fields_to_press_release_images.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_05_29_134459_add_press_release_quota_to_users.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_06_10_154249_add_rights_detail_fields_to_press_release_images_table.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_06_11_131506_add_classification_to_press_releases.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_06_11_131506_create_ki_audits_table.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_06_11_150538_add_content_score_to_press_releases.php User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 2026-06-12 08:30:13 +00:00
2026_06_12_100632_create_customer_columns.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100633_create_subscriptions_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100634_create_subscription_items_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100635_add_meter_id_to_subscription_items_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100636_add_meter_event_name_to_subscription_items_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100724_create_invoice_number_sequences_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100724_create_plans_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_100724_create_single_purchases_table.php Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 2026-06-12 10:15:46 +00:00
2026_06_12_105216_add_vat_fields_for_billing.php USt-Behandlung: Netto-Preise, VatResolver und Steuer-Ausweis im MAN-Kreis 2026-06-12 10:58:43 +00:00
2026_06_12_115633_drop_press_release_quota_stub_from_users.php Phase 9E (Abschluss): Checkout-Flows und Plan-Kontingent statt Quota-Stub 2026-06-12 12:10:32 +00:00
2026_06_12_142356_extend_billing_addresses_with_person_and_company.php User-Panel-Restarbeiten: PM-Guard, Profil-Rework, USt-ID-Prüfung, Buchungspflicht-Adresse 2026-06-12 14:36:18 +00:00
2026_06_12_160000_add_is_ai_generated_to_press_release_images.php KI-generierte Bilder: eigener Lizenztyp, Anbieter-Bestätigung, Kennzeichnung 2026-06-12 16:04:12 +00:00
2026_06_15_101337_backfill_email_verified_at_for_existing_users.php WS-6: E-Mail-Verifizierung, Auth-Flow-Fixes & Legacy-Rollen-Sicherheitsfix 2026-06-16 08:16:41 +00:00
2026_06_16_080913_downgrade_legacy_editor_users_to_customer.php WS-6: E-Mail-Verifizierung, Auth-Flow-Fixes & Legacy-Rollen-Sicherheitsfix 2026-06-16 08:16:41 +00:00
2026_06_16_103238_add_oauth_provider_columns_to_users.php WS-6: Google-Login via Laravel Socialite 2026-06-16 10:39:19 +00:00
2026_06_16_134458_create_legal_requests_table.php WS-3: Recht & Compliance – Rechts-Kern (DSGVO/Persönlichkeitsrecht/Melden + Queue) 2026-06-16 14:20:05 +00:00
2026_06_17_141218_create_credit_wallets_table.php Credit-Wallet + Ledger + Tier-Preisableitung (Fundament) 2026-06-17 14:16:43 +00:00
2026_06_17_141219_create_credit_transactions_table.php Credit-Wallet + Ledger + Tier-Preisableitung (Fundament) 2026-06-17 14:16:43 +00:00
2026_06_17_141703_create_review_checks_table.php Pruefzaehler + Pruefkontingent (Decision-Update Phase-2 vorgezogen) 2026-06-17 14:19:37 +00:00
2026_06_17_142008_create_boosts_table.php Boost-Geschaeftslogik (Decision-Update 2.2) 2026-06-17 14:22:12 +00:00
2026_06_17_145303_create_credit_topups_table.php Wallet-Topup ueber Stripe (Credit-Pakete mit Bonus-Staffel) 2026-06-17 14:56:23 +00:00
2026_06_18_183248_add_benefits_to_plans_table.php Paket-Vorteile: dynamische, im Admin pflegbare Vorteilsliste je Tarif 2026-06-18 16:36:09 +00:00
2026_07_03_115818_create_withdrawal_requests_table.php Recht: Online-Widerruf ohne Login (gesetzlicher Widerrufsbutton) - Backend 2026-07-03 10:03:37 +00:00
2026_07_03_132503_create_termination_requests_table.php Recht: Kuendigungsbutton nach Par. 312k BGB - Backend + Admin-Queue 2026-07-03 11:32:43 +00:00
2026_07_03_133618_add_withdrawal_waiver_to_press_releases.php Recht: Erloeschensklausel-Checkbox im Publikationsflow (Par. 356 BGB) 2026-07-03 11:41:31 +00:00
2026_07_03_180922_create_booking_confirmations_table.php T1neu: Unternehmer-Pflicht-Checkbox im Checkout, protokolliert mit AGB-Version 2026-07-03 16:17:59 +00:00
2026_07_06_111754_create_legal_documents_table.php E3: Rechtstext-Versionierung in der DB (legal_documents) 2026-07-06 09:21:52 +00:00
2026_07_06_111755_add_legal_document_id_to_booking_confirmations_table.php E3: Rechtstext-Versionierung in der DB (legal_documents) 2026-07-06 09:21:52 +00:00
2026_07_06_112202_create_rejection_categories_table.php Ablehnungskategorien live aus der DB (rejection_categories) 2026-07-06 09:25:16 +00:00
2026_07_06_113811_add_depublished_at_to_press_releases_table.php T12: Depublikations-Checkout mit Tombstone (config-gated) 2026-07-06 09:46:25 +00:00
2026_07_06_162634_create_contact_messages_table.php Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 2026-07-09 15:38:11 +00:00
2026_07_07_121625_add_web_search_fulltext_index_to_press_releases.php Suche: Volltext-Index + Fix fuer doppelte Alpine-Instanz 2026-07-07 13:03:14 +00:00
2026_07_07_124816_add_pending_email_to_users_table.php QA-Befunde A4: 2FA-Bestätigungsschritt + sicherer E-Mail-Wechsel 2026-07-07 10:53:24 +00:00
2026_07_07_153200_add_scheduled_change_to_subscriptions_table.php Downgrades ohne Gutschrift: Tarifwechsel nach unten erst zum Periodenende 2026-07-07 13:38:57 +00:00
2026_07_07_155322_add_web_archive_indexes_to_press_releases_table.php Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 2026-07-09 15:38:11 +00:00
2026_07_07_165034_add_depublication_to_single_purchases_type_enum.php single_purchases: type-ENUM um depublication erweitern 2026-07-07 14:51:56 +00:00
2026_07_08_111908_add_agency_name_to_users_table.php Profilfeld users.agency_name für Übermittler-Attribution 2026-07-08 09:20:32 +00:00
2026_07_08_172023_add_ai_declaration_to_press_releases.php KI-Kennzeichnung (Art. 50 KI-VO): Pflicht-Deklaration für Text & Bilder 2026-07-09 13:54:43 +00:00
2026_07_08_172023_create_press_release_ai_declarations_table.php KI-Kennzeichnung (Art. 50 KI-VO): Pflicht-Deklaration für Text & Bilder 2026-07-09 13:54:43 +00:00
2026_07_08_172113_backfill_ai_declaration_on_press_release_images.php KI-Kennzeichnung (Art. 50 KI-VO): Pflicht-Deklaration für Text & Bilder 2026-07-09 13:54:43 +00:00
2026_07_10_114915_create_press_release_events_table.php PM-Tracking: Ereignis-Log fuer Aufrufe + Shares (press_release_events) 2026-07-10 09:56:42 +00:00
2026_07_10_154103_create_email_notification_opt_outs_table.php E-Mail-Praeferenzen: Opt-out je Mail-Typ + One-Click-Unsubscribe ohne Login 2026-07-10 17:15:05 +00:00
2026_07_10_155535_create_app_settings_table.php Legacy-API-Paritaet S1+S2: connektar-Flow verhaltensgleich + KI-Schalter 2026-07-10 14:09:40 +00:00
2026_07_13_140855_add_placement_to_boosts_table.php Boost-Slot-Grenzen (5/3) + Kategorie-Boost zum halben Satz 2026-07-13 12:28:03 +00:00
2026_07_14_125600_create_boost_slot_locks_table.php billing: Nebenläufigkeit & Idempotenz härten (H4, Stripe, Boost-Slots) 2026-07-14 13:47:21 +00:00
2026_07_14_125700_add_unique_stripe_invoice_id_to_invoices_table.php billing: Nebenläufigkeit & Idempotenz härten (H4, Stripe, Boost-Slots) 2026-07-14 13:47:21 +00:00
2026_07_14_125841_add_scheduled_publication_index_to_press_releases_table.php press-releases: Publish-Rechte, Quota-Races & Slug vereinheitlichen 2026-07-14 13:47:51 +00:00
2026_07_15_174809_create_activity_events_table.php admin: Aktivitäts-Verlauf unter Reports ▸ Verlauf 2026-07-15 16:00:58 +00:00
2026_07_20_120000_add_feed_order_index_to_press_releases_table.php web: Startseiten-Feed cachen + Index gegen Filesort der Feed-Query 2026-07-20 14:53:09 +00:00
2026_07_21_111646_create_newsletter_campaign_tables.php admin: internes Newsletter-Modul mit Filtern, Protokoll und Abmeldung 2026-07-21 09:26:57 +00:00
2026_07_22_151506_add_sync_lock_to_press_releases_table.php recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur 2026-07-22 15:56:34 +00:00
2026_07_22_151507_add_meldeverfahren_fields_to_legal_requests_table.php recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur 2026-07-22 15:56:34 +00:00
2026_07_22_151507_create_press_release_redaction_snapshots_table.php recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur 2026-07-22 15:56:34 +00:00
2026_07_22_171134_add_report_purpose_to_magic_links_table.php recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur 2026-07-22 15:56:34 +00:00
2026_07_23_113508_add_change_to_single_purchases_type_enum.php recht: Meldeverfahren v2 Phasen 5+7 — DSGVO-Strukturformular, 10-€-Checkout mit KI-Vorprüfung, Triage & Panel-Modal 2026-07-23 13:02:57 +00:00
2026_08_25_120000_seed_press_release_view_watermark.php technik: Aufrufe über ein Ereignis-Log zählen statt im Request 2026-09-01 11:05:28 +00:00
2026_08_25_140000_create_press_release_search_table.php technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern 2026-09-01 11:04:43 +00:00
2026_08_25_150000_drop_fulltext_indexes_from_press_releases.php technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern 2026-09-01 11:04:43 +00:00
2026_08_25_160000_add_gone_at_to_companies_and_press_releases_tables.php web: Entfernung mit 410 Gone als Alternative zur Löschung 2026-09-01 11:06:35 +00:00
2026_09_01_090000_add_gone_restore_state_to_companies_and_press_releases_tables.php web: Entfernung mit 410 Gone als Alternative zur Löschung 2026-09-01 11:06:35 +00:00
2026_09_01_091000_add_email_index_to_companies_table.php db: Index auf companies.email 2026-09-01 11:08:06 +00:00
2026_09_01_100000_create_conversion_events_table.php conversion: Konversionsleiter mit Herkunft auf dem Magic-Link-Token (Block 0) 2026-09-01 13:12:12 +00:00
2026_09_01_100100_add_source_to_magic_links_table.php conversion: Konversionsleiter mit Herkunft auf dem Magic-Link-Token (Block 0) 2026-09-01 13:12:12 +00:00
2026_09_11_100000_create_company_email_groups_table.php companies: Adress-Klassifizierung persistieren (Roadmap 1a.2, E1 = 3) 2026-09-11 09:11:09 +00:00